【问题标题】:Display "$xx.90" instead of "$xx.9" in Javascript在 Javascript 中显示“$xx.90”而不是“$xx.9”
【发布时间】:2016-12-30 02:10:00
【问题描述】:

当我在下面使用 p=10000 ,r=15 和 n=60 ...

var x = parseFloat((Math.round(r/12/100*p/(1-Math.pow(1+ +(r/12/100),-n))*100)/100).toFixed(2));

x = 237.9 而不是 237.90

如果 p、r 和 n 的组合生成的数字不是 $xx.x",则代码 sn-p 可以正常工作...即格式化为 2 位小数。

但为什么显示的是 237.9 而不是 237.90?

【问题讨论】:

  • 嗨,Barmar -- 您能否请我参考对相同问题的回复?谢谢
  • 点击链接。
  • @Barmar 这里的问题不是toFixed的错误用法(如N does indeed mean exactly N decimal digits),而是结果被转换回浮点数。
  • @Frxstrem 我重新打开了这个问题,你应该把它变成一个答案。

标签: javascript currency


【解决方案1】:

当您调用<em>number</em>.toFixed(2) 时,您确实会得到一个带有两位十进制数字的字符串表示形式:

var number = 237.9;
number.toFixed(2);             // '237.90'

但是,当您随后对此使用parseFloat 时,您又将其返回 转换为数字;由于数字不包含有关要显示的零数量的信息,因此在打印时将删除最后一个零:

parseFloat(number.toFixed(2)); // 237.9

为避免这种情况,不要将字符串转换回浮点数,而是将其用作字符串。

【讨论】:

    【解决方案2】:
    var x = parseFloat((Math.round(r/12/100*p/(1-Math.pow(1+ +(r/12/100),-n))*100)/100)).toFixed(2);
    

    p=10000,r=15, n=60;
    
    var x = parseFloat((Math.round(r/12/100*p/(1-Math.pow(1+ +(r/12/100),-n))*100)/100)).toFixed(2);
    
    console.log(x)

    在所有操作后添加到Fixed。你需要字符串,基本上......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      相关资源
      最近更新 更多