javascript - 将已经四舍五入的浮点数字符串化,然后将其转换回数字会产生进一步的精度错误吗?
问题描述
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吗?
解决方案
Java 将数字到字符串的默认转换被指定为产生足够的数字来唯一地将数字与相邻的可表示值区分开来。换句话说,它被故意设计为生成一个可以转换回数字以生成原始值的字符串。
因此,如果您从 a 转换float
为字符串到 afloat
或从 adouble
转换为字符串到 a double
,您将得到原始数字。如果将 a 转换double
为字符串到 a float
,您可能会得到不同的数字。
推荐阅读
- r - 通过前两个字符串对特定行进行子集
- swift - 在模态上呈现模态会在导航栏和视图内容之间增加一个间隙
- c# - Azure Function 函数如何使用托管标识获取对 Azure 表存储的引用?
- flutter - 无法在http调用颤振中传递查询参数?
- typo3 - TYPO3 - 升级到 9.5.x 后后端登录不起作用(RSA 身份验证)
- assembly - ARM,16个寄存器中哪个是CPSR?
- reactjs - REACT JS 错误:上传 csv 文件时出现 501 未实现的问题
- express - http 调用怎么可能得到 302,即使对我来说它们是 404 调用?
- c - 我需要编写一个使用 C 的基本函数执行算术运算的程序
- linux - 如何为 shell 脚本套件创建 docker 映像