【发布时间】:2012-12-07 16:29:53
【问题描述】:
我想在不丢失任何精度的情况下将浮点变量转换为字符串。
即我希望字符串与我的浮点变量包含的信息相同,因为我使用输出进行进一步处理(即使这意味着字符串将非常长且可读)。
说得更清楚一点,我想有循环转换的函数
var dA = 323423.23423423e4;
var sA = toString(dA);
var dnA = toDouble(sA);
我希望 dnA 和 dA 相等
谢谢
PS:互联网上的资源通常谈论如何对字符串进行四舍五入,但我没有找到有关确切表示的信息。另外我对任意精度计算不感兴趣,我只需要双精度浮点运算。
【问题讨论】:
-
字符串是否需要以 10 进制表示浮点值?
-
@Hogan - ECMA-262 第 4.3.19 节指定 JavaScript(更确切地说,EcmaScript)内部数字表示是 64 位 IEEE 754 值。因此,它不依赖于硬件。
-
@TedHopp - 当然可以,但您只能保证 15-17 位小数的精度,因此很容易构造一个四舍五入的字符串。
-
@Hogan - 如果往返是字符串 → 数字 → 字符串,我会同意你的看法。并非每个基数为 10 的浮点字符串在 64 位 IEEE 754 中都有精确的表示。然而,反过来是不同的:事实上,每个 IEEE 754 浮点数都有一个 exact 字符串表示因为它是 2 的有限次方的总和,每个次方都有一个以 10 为底的有限表示。所以往返 Number → String → Number 可以精确地完成。
-
@TedHopp - 是的,这个问题很棘手。由于OQ(实际上)是字符串->数字->字符串->数字。例如
var dA = 123456323423.23423423e4; var sA = toString(dA); var dnA = toDouble(sA);会有 dnA = dA,但 dA 不等于解释字符串“123456323423.23423423e4”。尽管如此,我还是删除了我原来的评论,因为你比我更正确。
标签: javascript