将字符串解析为十进制并保留十进制值

时间:2013-05-23 10:35:21

标签: javascript

我需要将字符串解析为(2)小数点。

像这样:

console.log("12345.6789"); // return 12345.67

我面临的问题是,如果小数位数为.00,则会删除数字(小数),而是返回整数。

console.log(parseFloat("123.00"))// return 123  // expected 123.00
console.log(parseFloat("123.01"))// return 123.01 // expected 123.01

如果您想知道为什么这个问题?这是因为我需要提供数据,因此很容易扫描人类。

例如:下面不漂亮或不易阅读(特别是当文本与右边对齐时),我们进入数以千万计等......

123.23
123,456.46
123
123,956.01
145
135.02

我需要它是这样的:     123.23     123.46     123.00     123.01     145.00     135.02

typeof也不应该是字符串而是实际数字。

123.00 // correct
"123.00"// incorrect // (I can use .tofixed() so this is not useful )

4 个答案:

答案 0 :(得分:1)

这不是你尝试它的方式。你想要一个字符串。毫无疑问,3.003相同,如果您将其保存为数字,打印将没有任何区别。您想手动添加“0”,因此您必须创建一个字符串。 .tofixed()非常适合此用途。如果你打印东西,无论如何都会转换为字符串。

答案 1 :(得分:1)

如果您打印到控制台

console.log( (123).toFixed( 2 ) ); // outputs "123.00"

但是,输出周围的引号只是为了说明它是一个字符串。使用.toFixed()

应该没问题

答案 2 :(得分:1)

试试这个

如果值是文本类型:

 parseFloat("123.456").toFixed(2);

如果值是数字:

var numb = 123.23454;
numb = numb.toFixed(2);

Reference

答案 3 :(得分:0)

正如其他人已经说过的那样,toFixed()函数会处理小数部分 如果您还想添加千位分隔符以提高可读性,则可以使用 here 所述的简单正则表达式。

var d = ...   // <-- this is a number
var str = d.toFixed(2)
           .replace(/\B(?=(\d{3})+(?!\d))/g, ",");
           //  ^-- use this "replace()" to add thousand separators

另请参阅此 short demo