如何获得浮点数的动态精度?

举例说明我需要什么:

0.00019400000001.dynamicPrecision() //0.000194
0.0001940001.dynamicPrecision()     //0.000194
0.0001941.dynamicPrecision()        //0.0001941
0.0194.dynamicPrecision()           //0.0194
0.01940000.dynamicPrecision()       //0.0194


(重要的是最后不要有无用的零)

我不能使用toFixed或toPrecision,因为有效数字可以更改并且是未知的。那么用什么方法可以动态精确地编写dynamicPrecision方法?

最佳答案

尽管您的要求有点可疑,但一种方法是获取十进制的片段,然后将其与原始十进制进行比较。如果阈值百分比有所不同,请认为是答案。



const f = (v, threshold = .9999) => {
  let shift = 1;
  let part;

  do {
    shift *= 10;
    part = Math.floor(v * shift) / shift;
  } while (part / v < threshold);

  return part;
}

[0.194, 0.194000001, 0.19401, 0.194101]
  .forEach(v => console.log(f(v)));





这使用实际的数学运算来确定有效数字。

基本上,每一步都需要多一位数字,并将其与值进行比较。如果在阈值之内,则将其返回。

对于1.9410001,它将:

部分= 1.9
   部分= 1.94
   part = 1.941 // part / v>阈值,返回

然后可以配置阈值。 .9999表示它与原始值相同。

关于javascript - javascript float动态精度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49734046/

10-12 14:06