提问人:diego 提问时间:8/29/2023 最后编辑:Scott Marcusdiego 更新时间:8/30/2023 访问量:106
Javascript 精度,小数点后 15 位以上
Javascript precision with more than 15 decimals
问:
我有一个字符串,我需要将其转换为数字。
问题是,我有 20 位小数,而 JS 在尝试使用 parseFloat 时会在 15 或 17 位小数后失去精度。
例:
const number = "0.0000012726726461401083"
const parseNumber = parseFloat(number) // 0.0000012726726461401084
Y 尝试看看像 big.js 或 decimal.js 这样的库是否可以帮助我,但我没有找到任何解决方案。
答:
0赞
Adri
8/29/2023
#1
decimal.js 有什么不适合您的地方?它看起来与您所需要的完全一样,因此请尝试一下并尝试手动设置精度:https://mikemcl.github.io/decimal.js/#precision
由于该语言本身不支持比 17 精度更高的小数,并且 decimal.js 的默认值为 20 精度,您可以自定义,因此您必须使用这样的库来执行必要的操作。另一种方法是使用自定义代码处理它,除非绝对必要,否则不建议这样做。
当计算完成并且可能需要在其他地方使用结果数字时,应使用字符串来执行此操作。如果您需要在字符串格式和 decimal.js 库之间切换,这仍然是最好的仅限 js 的选项。
如果由于某种原因您真的不得不求助于本机 javascript 数字,最好不要依赖移动小数位,因为该语言仍然只允许 53 位的固定精度:仍然会发生不精确性。
评论
0赞
Scott Marcus
8/29/2023
这不是一个答案。这应该是一个评论。努力提供好的、高质量的答案(只包括返回 OP 的问题和链接的答案不被视为好的答案),这样你就可以获得足够的声誉来提供评论。
0赞
diego
8/30/2023
这个库,返回字符串,我需要一个数字。
0赞
Adri
8/30/2023
@ScottMarcus我需要 50 个业力来评论。这就是我首先尝试的。我提供了一个解决方案和一个指向相关资源的链接,这对我来说似乎足以回答
0赞
Scott Marcus
8/30/2023
我理解。正如我所指出的,努力提供好的、高质量的答案(请参阅我提供的链接以了解它是什么),以使您的声誉足够高以发表评论。目前的答案实际上只是一个回到 OP 的问题和一个链接,它不构成这里的答案 - 这是一个评论。
0赞
Adri
8/30/2023
@diego 您可以使用此库对号码执行必要的操作,最后使用字符串格式与其余代码或 API 进行通信。由于该语言不支持这种高精度,因此您必须求助于它或使用自定义代码以自己的方式执行此操作,这相同但更复杂。
评论
number
BigInteger