【问题标题】:Printing a whole number as a decimal in Javascript without rounding在Javascript中将整数打印为小数而不四舍五入
【发布时间】:2017-03-12 22:01:29
【问题描述】:

我有一个简单的问题要解决,我有一个包含双精度的变量,我正在从用户输入中读取另一个双精度。我需要将这两个数字相加并将结果打印到屏幕上。在我使用过的其他语言中,即使它是一个整数,它也是一个双精度数的事实会导致它打印一个小数点,即使它是一个整数。在 Javascript 中,情况并非如此。

var d = 2.0;
console.log(d) // out is 2

我可以使用toFixed() 强制它打印小数点,但随后它将对其他输入的结果进行四舍五入。如果结果是 2.0,我希望它打印“2.0”,如果结果是 2.345,我希望它打印“2.345”。

我现在的解决办法是,如果是整数,就转成字符串:

var d2 = 4.0
console.log((d2 % 1 == 0) ? d2+".0" : d2) // out is 4.0

我觉得必须有更好的方法来做到这一点。这对我来说似乎很笨拙。我一直在寻找解决方案,但到目前为止我发现的所有内容都使用toFixed() 或其他一些舍入。

【问题讨论】:

  • JavaScript 只有一种类型的数字,所以一切都是双精度数。它不关心它是否是一个整数;您必须手动进行格式化。
  • 在 JavaScript 中没有十进制或双精度这样的东西。一切都是数字,这很令人困惑(并且与大多数语言不同)

标签: javascript


【解决方案1】:

我认为更多的 Number-y 解决方案可能是:

var d = 4.0
var ds = Number.isInteger(d) ? d.toPrecision(2) : d.toString();
console.log(ds)

【讨论】:

  • 仅供参考 - 如果你想支持 Internet Explorer,你需要一个 polyfill 代表 Number.isInteger -
【解决方案2】:

试试这个:

var d = 2.0;
var parsD = parseFloat(d);   //you have to parse d either as Float or Integer
console.log(parsD) // out will be in decimal without rounding up

您必须确定小数位数。现实点。例如对于财务问题,小数点后两位即可。在这种情况下,将第 2 行更改为:

var parsD = parseFloat(d).toFixed(n)  //where n is an integer & number of decimals

这很好用。 就我而言,我收到了表单上的输入。输入可以是整数或小数。但是在处理时,每个输入都被视为十进制。

【讨论】:

    【解决方案3】:

    为了更好的动态打印(没有无用的前导零)使用:

    Number(num.toFixed(5)).toString()
    

    这里有一个例子来说明解释:

    const num = 2.2;
    console.log(
        Number(num.toFixed(5)).toString()
    );
    // 2.2
    
    const num = 2.2;
    console.log(
        num.toFixed(5)
    );
    
    // 2.20000
    

    【注意】你可以使用节点解释器更快地测试并拥有一个游乐场:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-10
      • 2018-07-26
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      相关资源
      最近更新 更多