Handsontable 中的科学记数法
Scientific Notation in Handsontable
正在寻找一种使用 Handsontable v0.33.0
显示科学记数法 (12000 = 1.2e+4
) 的方法
我在 Numbro 中找到了格式化数字的文档,但它似乎适合显示统计信息和货币(即 1230974
使用 format: '0.0a'
给出 1.2m
)
理想情况下,我希望按 d3-format 处理此问题的方式格式化数字
var value = 1230974
var formattedValue = d3.format(".3")(value)
console.log(formattedValue) // expected value: "1.23e+6"
这是我在@andy's advice and reading up on Handsontable Custom renderers
之后想到的
var sensibleNumericRenderer = (hotInstance, td, row, column,
prop, value, cellProperties) => {
Handsontable.renderers.BaseRenderer.apply(this, arguments);
let prec = 4
let str
var val = Handsontable.helper.stringify(value)
if(val === "") {
str = val
}
else {
val = +val //convert to Number
//convert numbers that are too large or too small
if(val !== 0 && (Math.abs(val) > 1e4 || Math.abs(val) < 1e-2)) {
//truncate to 4 significant figures then convert to scientific notation
str = Number.parseFloat(val.toPrecision(prec)).toExponential()
}
else {
// works nicely for small integers or larger decimal fractions
str = d3.format(`.${prec}`)(val)
}
}
td.innerHTML = str
return td
}
Handsontable.renderers.registerRenderer("sensibleNumeric", sensibleNumericRenderer)
正在寻找一种使用 Handsontable v0.33.0
12000 = 1.2e+4
) 的方法
我在 Numbro 中找到了格式化数字的文档,但它似乎适合显示统计信息和货币(即 1230974
使用 format: '0.0a'
给出 1.2m
)
理想情况下,我希望按 d3-format 处理此问题的方式格式化数字
var value = 1230974
var formattedValue = d3.format(".3")(value)
console.log(formattedValue) // expected value: "1.23e+6"
这是我在@andy's advice and reading up on Handsontable Custom renderers
之后想到的var sensibleNumericRenderer = (hotInstance, td, row, column,
prop, value, cellProperties) => {
Handsontable.renderers.BaseRenderer.apply(this, arguments);
let prec = 4
let str
var val = Handsontable.helper.stringify(value)
if(val === "") {
str = val
}
else {
val = +val //convert to Number
//convert numbers that are too large or too small
if(val !== 0 && (Math.abs(val) > 1e4 || Math.abs(val) < 1e-2)) {
//truncate to 4 significant figures then convert to scientific notation
str = Number.parseFloat(val.toPrecision(prec)).toExponential()
}
else {
// works nicely for small integers or larger decimal fractions
str = d3.format(`.${prec}`)(val)
}
}
td.innerHTML = str
return td
}
Handsontable.renderers.registerRenderer("sensibleNumeric", sensibleNumericRenderer)