将 JavaScript 字符串变量转换为小数/货币
Posted
技术标签:
【中文标题】将 JavaScript 字符串变量转换为小数/货币【英文标题】:convert a JavaScript string variable to decimal/money 【发布时间】:2011-08-31 01:09:22 【问题描述】:我们如何将 javascript 字符串变量转换为十进制?
有没有这样的功能:
parseInt(document.getElementById(amtid4).innerhtml)
【问题讨论】:
【参考方案1】:是的——parseFloat
。
parseFloat(document.getElementById(amtid4).innerHTML);
对于格式化数字,使用toFixed
:
var num = parseFloat(document.getElementById(amtid4).innerHTML).toFixed(2);
num
现在是一个字符串,其数字格式为两位小数。
【讨论】:
我们可以用 120.50 等小数点后 2 位来表示这个变量吗?现在我只得到 120.5。 引用@PhilipWhitehouse“请各位以后阅读这篇文章的人不要使用浮点数来存储货币。您会丢失精度和数据。您应该将其存储为整数美分(或便士等),然后在输出之前转换。”。来源:***.com/questions/149055/… @SSHThis 据我所知,JavaScript 没有整数类型。它只有一个 Number 类型,它们都在内部存储为 64 位浮点数。您的观点适用于其他具有整数类型的语言,例如 C#、C++,但不适用于 JavaScript。 @SimonBrangwin 他的观点仍然有效,但语义可能令人困惑。他真正的意思是“只在javascript中将货币存储为整数,因为它们将被存储为浮点数”。 提醒一下:parseFloat('22w')
是 22
和 parseFloat('w22')
是 NaN
【参考方案2】:
您还可以使用Number
构造函数/函数(不需要基数,可用于整数和浮点数):
Number('09'); /=> 9
Number('09.0987'); /=> 9.0987
或者像 Andy E 在 cmets 中所说,您可以使用 +
进行转换
+'09'; /=> 9
+'09.0987'; /=> 9.0987
【讨论】:
IE11 不支持此功能 @Pants 是关于 ES6 中 Number 内置对象的扩展,而不是关于能够使用Number
【参考方案3】:
我做了一个小辅助函数来执行此操作并捕获所有格式错误的数据
function convertToPounds(str)
var n = Number.parseFloat(str);
if(!str || isNaN(n) || n < 0) return 0;
return n.toFixed(2);
演示是here
【讨论】:
【参考方案4】:依靠 javascript 函数来比较和玩数字是相当冒险的。在 javascript (0.1+0.2 == 0.3) 中,由于舍入错误,将返回 false。使用 math.js 库。
【讨论】:
【参考方案5】:var formatter = new Intl.NumberFormat("ru",
style: "currency",
currency: "GBP"
);
alert( formatter.format(1234.5) ); // 1 234,5 £
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat
【讨论】:
我不知道这存在。 迄今为止最好的答案。解析浮动?精准地狱?不用了,谢谢!Intl.NumberFormat
搞定了。【参考方案6】:
一个简单的快捷方式是使用 +x 它使符号和十进制数字保持不变。 另一种选择是使用 parseFloat(x)。 parseFloat(x) 和 +x 的区别在于空白字符串 +x 返回 0 而 parseFloat(x) 返回 NaN。
【讨论】:
【参考方案7】:这行得通:
var num = parseFloat(document.getElementById(amtid4).innerHTML, 10).toFixed(2);
【讨论】:
以上是关于将 JavaScript 字符串变量转换为小数/货币的主要内容,如果未能解决你的问题,请参考以下文章