JS十进制数问题需要一个类似于toFixed()

问题描述

var num = 20.3698  //20.37
var num = 0.36587  //0.37
var num = 0.000014247 //0.000014
var num = 0.0000000000099879 //0.000000000001

我在 JavaScript 代码中遇到了一个问题:我有一些随机的大小不一的十进制数字,这些数字在打印时在视图窗格中占用了太多空间。

示例: var num = 0.023810002044 没问题,因为在这里我可以使用 toFixed(2) 但像这样的数字 0.00000000008824721 占用很多空间,如果我使用 toFixed(2) 那么它会给我 0.00 但我想要 0.00000000009 并且如果给定一个数字0.03248 那么输出应该是 0.03。

解决方法

您可以取 10 的对数并调整较小的数字。

const
    fix = v => v > 0.01
        ? v.toFixed(2)
        : v.toFixed(1 - Math.floor(Math.log10(Math.abs(v))));
    
console.log([20.3698,0.36587,0.000014247,0.00000000008824721,0.0000000000099879].map(fix));