将 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')22parseFloat('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 字符串变量转换为小数/货币的主要内容,如果未能解决你的问题,请参考以下文章

Javascript如何将十进制数转换为具有特定小数位数的字符串

Javascript:将字符串转换为数字?

javascript基础

js数字转换为float,取N个小数

将Javascript数字转换为两位小数[重复]

C语言中字符串和整数小数相互转换的函数以及头文件