如何在 JS 中正确处理浮点数?
How can I handle float number correctly in JS?
在 JS 中,我确实有一个来自 php 的浮点数,如下所示:
var number = 2,206.00
在 JS 中,我需要使用 parseFloat
那个数字。
所以我尝试了 parseFloat(number)
,但它只给出了 2。那么我怎样才能得到 2206.00
而不是 2?
好的,基本上你想要像 (20.03) 这样的小数点后的两位小数,
试试这个
parseFloat(number).toFixed(2)
您必须先删除逗号并使用 parseFloat
。
和点后大约2位小数,我看到你在PHP中使用number_format($myNumber, 2)
,所以在JS中,你使用.toFixed(2)
。
var number = '2,206.00';
var result = parseFloat(number.replace(/,/g, '')).toFixed(2);
console.log(result);
首先,您当前最有可能在 JS 中触发意外数字错误。
生成的值似乎来自 number_format()
PHP 函数,其中 returns 一个字符串。此外,var number
变量也应该被视为一个字符串,因为我们有一个字符串格式。
所以首先你应该引用 var number = '2,206.00'
之后,你必须使字符串像浮点数一样以便将其解析为浮点数所以我们应该用空字符串替换 ,
以便数变为 2206.00
number = number.replace(",","")
。最后,现在应该完成解析,以便将类似浮点数的字符串转换为实际的浮点数 parseFloat(number)
.
完整代码:
var number = '2,206.00';
number.replace(",","");
number = parseFloat(number);
Number.parseFloat
is the same function object as globalThis.parseFloat
.
如果globalThis.parseFloat
遇到的字符不是:
- 加号或,
- 减号或,
- 一个小数点或者,
- 一个指数(
E
或 e
)
...它 returns 该字符之前的值,忽略无效字符及其后的字符。第二个小数点也停止解析。
所以下面的打印 2
。这似乎是你的问题。
console.log(parseFloat('2,206.00')) // 2
解决方案:使用字符串操作从数字中删除任何逗号(实际上是 String
在解析它之前。
console.log(parseFloat('2,206.00'.replaceAll(',', ''))) // 2206
如果您需要将值存储为数字但将其呈现为格式化字符串,您可能需要 Number#toFixed 来呈现小数点后的值:
console.log((2206).toFixed(2)) // '2206.00'
最后说明:注意本地化,因为一些国家/地区使用逗号作为小数点,而小数点用于数字分组。正如@t.niese 所说:在没有本地化的情况下存储数值,然后在您的应用程序表面应用本地化。但这是一个更广泛、更复杂的话题。
在 JS 中,我确实有一个来自 php 的浮点数,如下所示:
var number = 2,206.00
在 JS 中,我需要使用 parseFloat
那个数字。
所以我尝试了 parseFloat(number)
,但它只给出了 2。那么我怎样才能得到 2206.00
而不是 2?
好的,基本上你想要像 (20.03) 这样的小数点后的两位小数, 试试这个
parseFloat(number).toFixed(2)
您必须先删除逗号并使用 parseFloat
。
和点后大约2位小数,我看到你在PHP中使用number_format($myNumber, 2)
,所以在JS中,你使用.toFixed(2)
。
var number = '2,206.00';
var result = parseFloat(number.replace(/,/g, '')).toFixed(2);
console.log(result);
首先,您当前最有可能在 JS 中触发意外数字错误。
生成的值似乎来自 number_format()
PHP 函数,其中 returns 一个字符串。此外,var number
变量也应该被视为一个字符串,因为我们有一个字符串格式。
所以首先你应该引用 var number = '2,206.00'
之后,你必须使字符串像浮点数一样以便将其解析为浮点数所以我们应该用空字符串替换 ,
以便数变为 2206.00
number = number.replace(",","")
。最后,现在应该完成解析,以便将类似浮点数的字符串转换为实际的浮点数 parseFloat(number)
.
完整代码:
var number = '2,206.00';
number.replace(",","");
number = parseFloat(number);
Number.parseFloat
is the same function object as globalThis.parseFloat
.
如果globalThis.parseFloat
遇到的字符不是:
- 加号或,
- 减号或,
- 一个小数点或者,
- 一个指数(
E
或e
)
...它 returns 该字符之前的值,忽略无效字符及其后的字符。第二个小数点也停止解析。
所以下面的打印 2
。这似乎是你的问题。
console.log(parseFloat('2,206.00')) // 2
解决方案:使用字符串操作从数字中删除任何逗号(实际上是 String
在解析它之前。
console.log(parseFloat('2,206.00'.replaceAll(',', ''))) // 2206
如果您需要将值存储为数字但将其呈现为格式化字符串,您可能需要 Number#toFixed 来呈现小数点后的值:
console.log((2206).toFixed(2)) // '2206.00'
最后说明:注意本地化,因为一些国家/地区使用逗号作为小数点,而小数点用于数字分组。正如@t.niese 所说:在没有本地化的情况下存储数值,然后在您的应用程序表面应用本地化。但这是一个更广泛、更复杂的话题。