Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 拆分数字字符串时出现意外结果_Javascript - Fatal编程技术网

Javascript 拆分数字字符串时出现意外结果

Javascript 拆分数字字符串时出现意外结果,javascript,Javascript,如果将以下数字转换为字符串,然后在小数点处拆分,则表示小数部分的字符串不正确。预期值为0123456789,但控制台中显示的值为01234567 const number = 123456789.0123456789; console.log(number.toString().split(".")); 如果小数点左边的位数发生了变化,那么控制台中显示的小数部分也会发生变化,但对于我到目前为止所做的测试,显示的小数部分不超过8个字符。为什么会这样?如何让它显示小数点后的真正数字字符串 编辑-

如果将以下数字转换为字符串,然后在小数点处拆分,则表示小数部分的字符串不正确。预期值为0123456789,但控制台中显示的值为01234567

const number = 123456789.0123456789;
console.log(number.toString().split("."));
如果小数点左边的位数发生了变化,那么控制台中显示的小数部分也会发生变化,但对于我到目前为止所做的测试,显示的小数部分不超过8个字符。为什么会这样?如何让它显示小数点后的真正数字字符串

编辑-
经过一些尝试和错误测试后,以下是一些额外的发现-
number=2097151.0123456789时,小数部分是正确的。

number=2097152.0123456789时,小数部分不正确。

按照国际IEEE 754标准,js中浮点的二进制表示由64位组成:

  • 一个符号位
  • 11指数位和
  • 52个有效位
数字f存储为f=s·m·2^e,其中s为1或2−一,

由于二进制中的表示形式,如果浮点数在十进制中是有限的(例如12,45),但在二进制中是周期性的(例如110001111001100…),则可能会出现问题。

由于空间有限,该数字将四舍五入。有时,这种舍入可以在重新转换为十进制时恢复;但是,在某些情况下,由于精度不够(即另一个数字具有相同的表示形式),这是不可能的。

Dot
(。
是一个regex元字符,表示任意一个字符。如果要在文字点上拆分,请使用反斜杠对其进行转义:
number.toString().split(/\./)
如果在它转换为字符串之前仅对
number
进行控制台操作,您将看到它作为编号
123456789.01234567
记录。我认为你遇到了JS浮动的某种分辨率限制…这是否澄清了你的问题?