我正在将d3.format(“s”)与d3.svg.axis.tickFormat配合使用,以很好地格式化带有国际单位制的刻度标签(来自国际单位制)。除某些值会舍入错误并返回一吨小数位(例如1400,例如1400 * 0.001 = 1.4000000000000001)外,它在大多数情况下都能正常工作。

为了解决这个问题,我可以指定一个精度,例如d3.format(“。2s”),但是在1更好的情况下,这将强制使用2个有效数字。例如,如果我有刻度[5000,10000,15000],我现在会看到[5.0k,10k,15k]。最初,当我完全不指定精度时,我得到了[5k,10k,15k]。

我想知道是否可以指定最大精度,以便仅当有效位数超过指定的数量时才应用该精度吗?因此5000将是5k,而不是5.0k。

最佳答案

1400 * .001是1.4000000000000001,而1400/1000是1.4;将整数乘以10的负幂(例如.001)可能会导致舍入误差,但是看来将整数除以10的幂(例如1000)并不会。或者至少,可能性较小?我已经在fix-si-format-rounding分支中实现了一个临时修订。它严格地向后不兼容,但是由于d3.formatPrefix函数未记录,因此我认为将其包含在下一个修补程序版本中是安全的。

编辑:此修复程序在版本2.9.2中发布。

关于javascript - d3.format中的可变精度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10310613/

10-12 00:14
查看更多