【问题标题】:Parse String to decimal and retain decimal values将字符串解析为十进制并保留十进制值
【发布时间】:2013-05-23 10:35:20
【问题描述】:

我需要将字符串解析为 (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 )

【问题讨论】:

  • 123 == 123.00 in Javascript 所以没有答案...
  • 对,我不确定,如果这是一个数据类型问题,那更像是一个脚本问题 :) 我认为,.toFixed() 是合适的使用方式,所以会坚持下去: ) 非常感谢您的帮助

标签: javascript


【解决方案1】:

试试这个

如果值为文本类型:

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

如果值为数字:

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

Reference

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      如果你打印到控制台

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

      但是,输出周围的引号只是为了说明它是一个字符串这一事实。使用.toFixed()应该没问题。

      【讨论】:

        【解决方案4】:

        就像其他人已经说过的那样,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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-12-20
          • 2012-02-03
          • 2015-08-02
          • 2020-03-14
          • 2020-06-20
          • 2018-01-22
          • 1970-01-01
          相关资源
          最近更新 更多