在JavaScript中,当从浮点数转换为字符串时,如何才能在小数点后得到2位数字?例如,0.34而不是0.3445434。


当前回答

var result = Math.round(original*100)/100;

具体细节,以防代码不是自解释的。

编辑:…或者直接使用toFixed,就像Tim Büthe提议的那样。忘记了,谢谢你的提醒(还有点赞):)

其他回答

也许你还需要小数分隔符?这是我刚刚创建的一个函数:

function formatFloat(num,casasDec,sepDecimal,sepMilhar) {
    if (num < 0)
    {
        num = -num;
        sinal = -1;
    } else
        sinal = 1;
    var resposta = "";
    var part = "";
    if (num != Math.floor(num)) // decimal values present
    {
        part = Math.round((num-Math.floor(num))*Math.pow(10,casasDec)).toString(); // transforms decimal part into integer (rounded)
        while (part.length < casasDec)
            part = '0'+part;
        if (casasDec > 0)
        {
            resposta = sepDecimal+part;
            num = Math.floor(num);
        } else
            num = Math.round(num);
    } // end of decimal part
    while (num > 0) // integer part
    {
        part = (num - Math.floor(num/1000)*1000).toString(); // part = three less significant digits
        num = Math.floor(num/1000);
        if (num > 0)
            while (part.length < 3) // 123.023.123  if sepMilhar = '.'
                part = '0'+part; // 023
        resposta = part+resposta;
        if (num > 0)
            resposta = sepMilhar+resposta;
    }
    if (sinal < 0)
        resposta = '-'+resposta;
    return resposta;
}

使用乘法器的所有解都存在一个问题。不幸的是,kkyy和Christoph的解决方案都是错误的。

请测试数字551.175的小数点后2位-它将四舍五入为551.17,而它应该是551.18 !但是如果你测试的是451.175,就可以了- 451.18。所以第一眼很难发现这个错误。

问题在于乘法:尝试551.175 * 100 = 55117.49999999999 (up !)

所以我的想法是在使用Math.round()之前用toFixed()处理它;

function roundFix(number, precision)
{
    var multi = Math.pow(10, precision);
    return Math.round( (number * multi).toFixed(precision + 1) ) / multi;
}

使用toFixed()时要小心:

首先,使用数字的二进制表示来四舍五入,这可能会导致意想不到的行为。例如

(0.595).toFixed(2) === '0.59'

而不是‘0.6’。

其次,toFixed()存在IE错误。在IE中(至少到版本7,没有检查IE8),以下是正确的:

(0.9).toFixed(0) === '0'

遵循kkyy的建议或使用自定义toFixed()函数可能是一个好主意,例如

function toFixed(value, precision) {
    var power = Math.pow(10, precision || 0);
    return String(Math.round(value * power) / power);
}
function trimNumber(num, len) {
  const modulu_one = 1;
  const start_numbers_float=2;
  var int_part = Math.trunc(num);
  var float_part = String(num % modulu_one);
      float_part = float_part.slice(start_numbers_float, start_numbers_float+len);
  return int_part+'.'+float_part;
}
var result = Math.round(original*100)/100;

具体细节,以防代码不是自解释的。

编辑:…或者直接使用toFixed,就像Tim Büthe提议的那样。忘记了,谢谢你的提醒(还有点赞):)