首页 > 解决方案 > 将已经四舍五入的浮点数字符串化,然后将其转换回数字会产生进一步的精度错误吗?

问题描述

Accrodading to浮点数学被破坏了吗?,我知道 0.1+0.2 由于浮点错误导致 0.30000000000000004 而不是 0.3。但是,如果我从 alert(0.1+0.2) 中复制 "0.30000000000000004" 并写入 Number("0.30000000000000004"),它是否仍然等于 0.1+0.2?

或者一般来说:

let a=float_number_1 + float_number2;
let b=Number((float_number_1 + float_number2).toString());

a总是完全等于b吗?

标签: javascriptstringfloating-pointstringify

解决方案


Java 将数字到字符串的默认转换被指定为产生足够的数字来唯一地将数字与相邻的可表示值区分开来。换句话说,它被故意设计为生成一个可以转换回数字以生成原始值的字符串。

因此,如果您从 a 转换float为字符串到 afloat或从 adouble转换为字符串到 a double,您将得到原始数字。如果将 a 转换double为字符串到 a float,您可能会得到不同的数字。


推荐阅读