使用JSON.parse解析数量

问题描述 投票:1回答:1

Dos它存在一个最大浮点数,小数点后有两位数,可以用JSON.parse解析而不会丢失精度?

例如:

JSON.parse('{"amount": 9999999999999.99}')

{金额:9999999999999.99} //不输(可能)

JSON.parse('{"amount": 99999999999999.99}')

{金额:99999999999999.98} //输了

javascript json floating-point precision
1个回答
1
投票

如果x是一个15位有效数字或更少的十进制浮点数,那么将x转换为JavaScript的Number类型然后将结果转换回具有相同有效位数的十进制浮点数就会产生x,只要数字为x在正常范围内。因此,从“.00”到“9999999999999.99”的小数点后面的两位数的所有小数都可以用小数点后的两位数进行解析,存储和重新格式化,结果将是原始数字。

存储的值通常不等于原始值。例如,当解析“.99”时,结果将正好是0.989999999999999911182158029987476766109466552734375。但是,存储的值将足够接近原始值,当转换回原始的数字位数时,恢复原始值。请注意,您必须知道原始的位数;它本身并不是Number值的一部分。

15是该属性的下限。可能存在一些指数值,所有16位十进制数字都可以在往返中存活。但是,由于99999999999999.99(16位)产生99999999999999.98,我们知道这不是其中一个间隔。

如果您想知道此往返属性首次失败的9999999999999.99和99999999999999.99之间的具体数字,您可能需要以计算方式进行搜索。它很多都不是一个易于通过数学属性直接计算的值。

© www.soinside.com 2019 - 2024. All rights reserved.