作成日: 2026/04/15 最終更新日: 2026/04/15
文書種別
不具合
状況
回避方法あり
詳細
科学表記フォーマット(E, e)でフォーマットされた値が正しくありません。
(例)
数値「0.000265」をフォーマットした場合、「2.6E-4」と計算されます。
正しくは、「2.7E-4」です。
(例)
数値「0.000265」をフォーマットした場合、「2.6E-4」と計算されます。
正しくは、「2.7E-4」です。
回避方法
フォーマットする数値を以下の関数に渡します。
function formatE1Workaround(value) {
if (!isFinite(value) || value === 0) {
return value.toExponential(1).replace('e', 'E');
}
var sign = value < 0 ? '-' : '';
var str = Math.abs(value).toString();
var exponent = 0;
var digits = '';
if (str.indexOf('e') > -1) {
var sciParts = str.split('e');
exponent = parseInt(sciParts[1], 10);
digits = sciParts[0].replace('.', '');
} else if (str.indexOf('.') > -1) {
var parts = str.split('.');
if (+parts[0]) {
exponent = parts[0].length - 1;
digits = parts[0] + parts[1];
} else {
var firstSig = parts[1].search(/[1-9]/);
exponent = -firstSig - 1;
digits = parts[1].slice(firstSig);
}
} else {
exponent = str.length - 1;
digits = str;
}
digits = (digits.replace(/^0+/, '') + '000').slice(0, 3);
var mantissa = parseInt(digits.slice(0, 2), 10) + (digits[2] >= '5' ? 1 : 0);
if (mantissa >= 100) {
mantissa = 10;
exponent++;
}
return sign + (mantissa / 10).toFixed(1) + 'E' + (exponent >= 0 ? '+' : '') + exponent;
}
var data = [];
data.push({
value_text: "0.000265",
value: 0.000265
});
var theGrid = new wijmo.grid.FlexGrid('#theGrid', {
autoGenerateColumns: false,
columns: [
{ binding: 'value_text', header: 'value', width: 150 },
{ binding: 'value', header: 'default(n2)', width: 150 },
{ binding: 'value', header: 'format "E1"', format: "E1", width: 150 },
{ binding: 'value', header: 'format "g5"', format: "g5", width: 150 },
{ binding: 'value', header: 'workaround "E1"', width: 200 }
],
itemsSource: data,
itemFormatter: function (panel, row, col, cell) {
if (panel.cellType === wijmo.grid.CellType.Cell && col === 4 && panel.grid.activeEditor == null) {
var value = panel.getCellData(row, col, false);
cell.textContent = formatE1Workaround(value);
// 回避適用前
console.log('Before workaround:', wijmo.Globalize.formatNumber(value, "E1", false, true));
// 回避策
console.log('After workaround:', formatE1Workaround(value));
}
}
});