将float转换为至少包含一个小数位的字符串(javascript)

时间:2015-02-08 01:14:22

标签: javascript

让我举个例子。

var a = 2.0;
var stringA = "" + a;

我会得到:stringA = "2",但我想:stringA = "2.0"

我不想失去精确度,所以如果:

var b = 2.412;
var stringB = "" + b;

我想获得标准:stringB = "2.412"

这就是toFixed()在这里工作的原因。有没有其他方法可以做到这一点,而不是明确检查这样的整数?:

if (a % 1 === 0)
    return "" + a + ".0";
else
    return "" + a;

5 个答案:

答案 0 :(得分:12)

这有一个内置功能。<​​/ p>

var a = 2;
var b = a.toFixed(1);

这会将数字四舍五入到一位小数,并将其显示为小数点后一位,即使它为零。

答案 1 :(得分:4)

如果要将.0附加到Number to String转换的输出并保持非整数的精度,只需测试一个整数并特别处理它。

function toNumberString(num) { 
  if (Number.isInteger(num)) { 
    return num + ".0"
  } else {
    return num.toString(); 
  }
}

Input  Output
3      "3.0"
3.4567 "3.4567"

答案 2 :(得分:3)

如果你的浮动是

 var a = 2.0;
    var b = (a % 1 == 0) ? a + ".0" : a.toString();

编辑:添加引用并更改为允许.0 http://www.w3schools.com/jsref/jsref_tostring_number.asp

答案 3 :(得分:0)

对于其他人来看这个问题,我刚想到,要将一个浮点数转换为一个至少有n个小数位的字符串,可以写一下:

function toAtLeastNDecimalPlaces(num, n) {
    normal_conv = num.toString();
    fixed_conv = num.toFixed(n);
    return (fixed_conv.length > normal_conv.length ? fixed_conv : normal_conv);
}

请注意,根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixedtoFixed()最多可以使用20个小数位。因此,上述功能不适用于n > 20

此外,上述功能对科学记数法没有任何特殊处理(但在此主题中也没有任何其他答案)。

答案 4 :(得分:0)

这个解决方案试图平衡简洁性和可读性

const floatString = (n) => Number.isInteger(n) ? n.toFixed(1) : n.toString();