在Javascript中将整数打印为十进制而不进行舍入

时间:2017-03-12 22:01:29

标签: javascript

我有一个简单的问题需要解决,我有一个包含double的变量,我用另一个来自用户输入的读取。我需要将两个数字相加并将结果打印到屏幕上。在我工作的其他语言中,只是它是一个双倍会导致它用小数打印,即使它是一个整数。在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()或其他一些舍入内容。

3 个答案:

答案 0 :(得分:1)

我认为更多的数字解决方案可能是:

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

答案 1 :(得分:0)

试试这个:

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位小数就可以了。在这种情况下,将第2行更改为:

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

这很好用。 在我的情况下,我收到表格上的输入。输入可以是整数或小数。但是在处理时,每个输入都被视为十进制。

答案 2 :(得分:0)

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

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

[注意] 您可以使用节点解释器来更快地进行测试并拥有一个游乐场:

enter image description here