您可能知道,FutureBuilder
在JavaScript中。处理金钱时精度有限可能会成为问题。为了克服这个问题,可以使用BigInt,它显然需要整数值。
不是以美元为基本单位,而是以美分作为十进制小数(例如¢10的0.1 + 0.2 == 0.30000000000000004
),则很容易使用分作为基础单位(¢10的0.10
),使其成为仅整数
但是,当呈现给用户时,您可能希望以美元而不是美分显示价值。但是您不能将10
除以BigInt
:
Number
另一方面,Intl.NumberFormat似乎也没有提供执行此操作的方法。那么,您能做什么呢?
基于10的简单方法是在数字字符串的位置-2处插入一个句点并将其传递给格式化程序:
> BigInt(10) / 100
Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions
这是要走的路吗?有更好的解决方案吗?
我知道let formatter = Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD"
})
let s = (BigInt(10) + BigInt(20)).toString() // "30"
s = s.padStart(2, "0") // zero-pad single digit (if input 0..9)
s = s.slice(0, -2) + "." + s.slice(-2) // ".30"
formatter.format(s) // "$0.30"
也会由于舍入而产生format(0.30000000000000004)
,但这是关于BigInt + UI的一个普遍问题。
答案 0 :(得分:0)
如错误消息所述,将您的BigInt
明确转换为Number
。不要像这样做那样使用中间字符串:
let toDisplayValue = n => Number(n) / 100;
console.log(toDisplayValue(BigInt(1234567)));
console.log(toDisplayValue(BigInt(45)));