パーセント書式が正常に表示されない
対象製品
SpreadJS(Ver.10.x.x -)
発生環境
10.3.0
状況
修正済み
詳細
セルに%表記で入力した値が正常に表示されない場合があります。
■現象再現手順
1.セルの表示形式を「パーセンテージ」に変更
2.セルに「0.7%」と値を設定
3.設定された値が、「0.006999999999999999」となる。
期待している値としては、「0.007」になります。
この現象はJavaScriptの計算精度による問題となります。
例えば、0.7 / 100 の計算をJavaScriptコードで実行すると
結果は 0.007ではなく0.006999999999999999となり、SpreadJSでも
同様の動作となります。
■現象再現手順
1.セルの表示形式を「パーセンテージ」に変更
2.セルに「0.7%」と値を設定
3.設定された値が、「0.006999999999999999」となる。
期待している値としては、「0.007」になります。
この現象はJavaScriptの計算精度による問題となります。
例えば、0.7 / 100 の計算をJavaScriptコードで実行すると
結果は 0.007ではなく0.006999999999999999となり、SpreadJSでも
同様の動作となります。
回避方法
SpreadJS (Ver.11.2.4)で修正済み
Ver.10.3.0では、以下のようにGC.Spread.Formatter.GeneralFormatterにて補正する方法が考えられます。
■サンプルコード
var oldParseFn = GC.Spread.Formatter.GeneralFormatter.prototype.parse;
GC.Spread.Formatter.GeneralFormatter.prototype.parse = function (strValue) {
var parseValue = oldParseFn.apply(this, arguments);
if (this.formatString() === "0.0%") {
parseValue = +parseValue.toPrecision(15);
}
return parseValue;
}
Ver.10.3.0では、以下のようにGC.Spread.Formatter.GeneralFormatterにて補正する方法が考えられます。
■サンプルコード
var oldParseFn = GC.Spread.Formatter.GeneralFormatter.prototype.parse;
GC.Spread.Formatter.GeneralFormatter.prototype.parse = function (strValue) {
var parseValue = oldParseFn.apply(this, arguments);
if (this.formatString() === "0.0%") {
parseValue = +parseValue.toPrecision(15);
}
return parseValue;
}