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)