掌握中的科学记数法

时间:2018-01-24 03:53:29

标签: javascript d3.js handsontable

寻找一种用12000 = 1.2e+4

显示科学记数法(Handsontable v0.33.0)的方法

我在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"

1 个答案:

答案 0 :(得分:0)

这是我根据@andy的建议和阅读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)