@
UnluckyNinja #16
我以前项目也写过类似的东西
```ts
function n_str(
value: number,
options: { fractionDigits?: number } = {},
): string {
const { fractionDigits = 3 } = options
const str = value.toFixed(fractionDigits).replace(/(\.?|(?<=\.\d+))0+$/, '')
return str === '-0' ? '0' : str
}
```
toFixed()的问题是无法智能判断精度,需要传入参数指定精度
nstr(1.123456) -> 1.123456
n_str(1.123456) -> 1.123
n_str(1.123456, { fractionDigits: 6 }) -> 1.123456
这里的难点是无法简单判断出浮点数计算的小数位数,比如 0.1+0.2 ,人类都知道应该是 1 位小数点,但是如何从 0.30000000000000004 解析出来,还有科学计数法把这个问题搞得更加复杂,而 nstr 能解决这个问题。手动指定精度 2 行就解决了,为了少写这个参数我不介意在项目里多 install 一个包。
目前 nstr 我测了所有情况,就剩 456.78999999456789=456.78 这个问题,其他的都正常
在 nstr 的方案上使用 toFixed 或许能解决这个问题同时不引入其他边缘情况,例如楼上的 pr
https://github.com/shuding/nstr/pull/2/commits/4713d6447bc8fd3af2e246e63ea2f0edb8445d07