格式编号始终显示2个小数位

| 我想将数字格式化为始终显示2个小数位,并在适用的情况下四舍五入。 例子:
number     display
------     -------
1          1.00
1.341      1.34
1.345      1.35
我一直在使用这个:
parseFloat(num).toFixed(2);
但它会将
1
显示为
1
,而不是
1.00
。     
已邀请:
(Math.round(num * 100) / 100).toFixed(2);
现场演示
var num1 = \"1\";
document.getElementById(\'num1\').innerHTML = (Math.round(num1 * 100) / 100).toFixed(2);

var num2 = \"1.341\";
document.getElementById(\'num2\').innerHTML = (Math.round(num2 * 100) / 100).toFixed(2);

var num3 = \"1.345\";
document.getElementById(\'num3\').innerHTML = (Math.round(num3 * 100) / 100).toFixed(2);
span {
    border: 1px solid #000;
    margin: 5px;
    padding: 5px;
}
<span id=\"num1\"></span>
<span id=\"num2\"></span>
<span id=\"num3\"></span>
Number(1).toFixed(2);         // 1.00
Number(1.341).toFixed(2);     // 1.34
Number(1.345).toFixed(2);     // 1.34 NOTE: See andy\'s comment below.
Number(1.3450001).toFixed(2); // 1.35
document.getElementById(\'line1\').innerHTML = Number(1).toFixed(2);
document.getElementById(\'line2\').innerHTML = Number(1.341).toFixed(2);
document.getElementById(\'line3\').innerHTML = Number(1.345).toFixed(2);
document.getElementById(\'line4\').innerHTML = Number(1.3450001).toFixed(2);
<span id=\"line1\"></span>
<br/>
<span id=\"line2\"></span>
<br/>
<span id=\"line3\"></span>
<br/>
<span id=\"line4\"></span>
如果
value = 1.005
,此答案将失败。 作为更好的解决方案,可以通过使用指数表示法表示的数字来避免舍入问题:
Number(Math.round(1.005+\'e2\')+\'e-2\'); // 1.01
@Kon和原始作者建议的更干净的代码:
Number(Math.round(parseFloat(value + \'e\' + decimalPlaces)) + \'e-\' + decimalPlaces)
您可以在末尾添加ѭ15来保留小数点,例如
1.00
,但请注意,它将以字符串形式返回。
Number(Math.round(parseFloat(value + \'e\' + decimalPlaces)) + \'e-\' + decimalPlaces).toFixed(decimalPlaces)
信用:JavaScript中的舍入小数     
var num = new Number(14.12);
console.log(num.toPrecision(2));//outputs 14
console.log(num.toPrecision(3));//outputs 14.1
console.log(num.toPrecision(4));//outputs 14.12
console.log(num.toPrecision(5));//outputs 14.120
    
四舍五入到N位的通用解决方案
function roundN(num,n){
  return parseFloat(Math.round(num * Math.pow(10, n)) /Math.pow(10,n)).toFixed(n);
}


console.log(roundN(1,2))
console.log(roundN(1.34,2))
console.log(roundN(1.35,2))
console.log(roundN(1.344,2))
console.log(roundN(1.345,2))
console.log(roundN(1.344,3))
console.log(roundN(1.345,3))
console.log(roundN(1.3444,3))
console.log(roundN(1.3455,3))

Output

1.00
1.34
1.35
1.34
1.35
1.344
1.345
1.344
1.346
    
最简单的答案:
var num = 1.2353453;
num.toFixed(2); // 1.24
示例:http://jsfiddle.net/E2XU7/     
为了获得最精确的舍入,请创建以下函数:
function round(value, decimals) {
    return Number(Math.round(value +\'e\'+ decimals) +\'e-\'+ decimals).toFixed(decimals);
}
并将其舍入到小数点后两位:
console.log(\"seeked to \" + round(1.005, 2));
> 1.01
感谢Razu,本文和MDN \的Math.round参考。     
var number = 123456.789;


console.log(new Intl.NumberFormat(\'en-IN\', { maximumFractionDigits: 2 }).format(number));
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat     
如果您已经在使用jQuery,则可以使用jQuery Number Format插件。 插件可以将格式化的数字作为字符串返回,您可以设置小数和千位分隔符,还可以选择显示的小数位数。
$.number( 123, 2 ); // Returns \'123.00\'
您还可以从GitHub获取jQuery Number Format。     
你是这个意思吗?
function showAsFloat(num, n){
      return !isNaN(+num) ? (+num).toFixed(n || 2) : num;
}

document.querySelector(\'#result\').textContent = 
    [
     \'command                      | result\',
     \'-----------------------------------------------\',
     \'showAsFloat(1);              | \' + showAsFloat(1),
     \'showAsFloat(1.314);          | \' + showAsFloat(1.314),
     \'showAsFloat(\\\'notanumber\\\')    | \' + showAsFloat(\'notanumber\'),
     \'showAsFloat(\\\'23.44567\\\', 3)   | \' + showAsFloat(\'23.44567\', 3),
     \'showAsFloat(2456198, 5)      | \' + showAsFloat(\'2456198\', 5),
     \'showAsFloat(0);              | \' + showAsFloat(0)
    ].join(\'\\n\');
<pre id=\"result\"></pre>
将数字转换为字符串,仅保留两个小数:
var num = 5.56789;
var n = num.toFixed(2);
n的结果将是:
5.57
    
对于现代浏览器,请使用
toLocaleString
var num = 1.345;
num.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 });
将语言环境标签指定为控制小数点分隔符的第一个参数。对于点,请使用例如美国英语语言环境:
num.toLocaleString(\"en-US\", { maximumFractionDigits: 2, minimumFractionDigits: 2 });
这使:   1.35 欧洲的大多数国家/地区使用逗号作为小数点分隔符,因此,例如,如果您使用瑞典语/瑞典语区域设置,则:
num.toLocaleString(\"sv-SE\", { maximumFractionDigits: 2, minimumFractionDigits: 2 });
它会给:   1,35     
您在找地板吗?
var num = 1.42482;
var num2 = 1;
var fnum = Math.floor(num).toFixed(2);
var fnum2 = Math.floor(num2).toFixed(2);
alert(fnum + \" and \" + fnum2); //both values will be 1.00
    
function currencyFormat (num) {
    return \"$\" + num.toFixed(2).replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, \"$1,\")
}

console.info(currencyFormat(2665));   // $2,665.00
console.info(currencyFormat(102665)); // $102,665.00
    
这也是一个通用函数,可以格式化为任意数量的小数位:
function numberFormat(val, decimalPlaces) {

    var multiplier = Math.pow(10, decimalPlaces);
    return (Math.round(val * multiplier) / multiplier).toFixed(decimalPlaces);
}
    
在需要特定格式的地方,您应该编写自己的例程或使用满足您需要的库函数。 ECMAScript的基本功能通常不足以显示带格式的数字。 舍入和格式的完整说明在这里:http://www.merlyn.demon.co.uk/js-round.htm#RiJ 通常,舍入和格式化仅应在输出之前作为最后一步执行。较早这样做可能会引入意想不到的大错误并破坏格式。     
function number_format(string,decimals=2,decimal=\',\',thousands=\'.\',pre=\'R$ \',pos=\' Reais\'){
  var numbers = string.toString().match(/\\d+/g).join([]);
  numbers = numbers.padStart(decimals+1, \"0\");
  var splitNumbers = numbers.split(\"\").reverse();
  var mask = \'\';
  splitNumbers.forEach(function(d,i){
    if (i == decimals) { mask = decimal + mask; }
    if (i>(decimals+1) && ((i-2)%(decimals+1))==0) { mask = thousands + mask; }
    mask = d + mask;
  });
  return pre + mask + pos;
}
var element = document.getElementById(\"format\");
var money= number_format(\"10987654321\",2,\',\',\'.\');
element.innerHTML = money;
#format{
display:inline-block;
padding:10px;
border:1px solid #ddd;
background:#f5f5f5;
}
<div id=\'format\'>Test 123456789</div>
您没有给我们提供全部信息。 当我将39粘贴到位置栏中时,
javascript:alert(parseFloat(1).toFixed(2))
在浏览器中显示1.00。 但是,如果您随后对其进行处理,它将还原。
var num = 2
document.getElementById(\'spanId\').innerHTML=(parseFloat(num).toFixed(2)-1)


shows 1 and not 1.00
    
var quantity = 12;

var import1 = 12.55;

var total = quantity * import1;

var answer = parseFloat(total).toFixed(2);

document.write(answer);
    
我必须在parseFloat()和Number()转换之间做出决定,然后才能进行toFixed()调用。这是捕获用户输入后的数字格式示例。 HTML:
<input type=\"number\" class=\"dec-number\" min=\"0\" step=\"0.01\" />
事件处理程序:
$(\'.dec-number\').on(\'change\', function () {
     const value = $(this).val();
     $(this).val(value.toFixed(2));
});
上面的代码将导致TypeError异常。请注意,尽管html输入类型是\“ number \”,但用户输入实际上是\“ string \”数据类型。但是,toFixed()函数只能在为Number的对象上调用。 我的最终代码如下所示:
$(\'.dec-number\').on(\'change\', function () {
     const value = Number($(this).val());
     $(this).val(value.toFixed(2));
});
我偏爱使用Number()与parseFloat()进行转换的原因是因为我既不必为空的输入字符串也不必为NaN值执行额外的验证。 Number()函数将自动处理一个空字符串并将其隐藏为零。     
刚遇到这个最长的线程之一,下面是我的解决方案: parseFloat(Math.round((parseFloat(num * 100))。toFixed(2))/ 100).toFixed(2) 让我知道是否有人可以戳一个洞     
我喜欢:
var num = 12.749;
parseFloat((Math.round(num * 100) / 100).toFixed(2)); // 123.75
将数字四舍五入到小数点后两位 然后确保用ѭ46解析 返回Number而不是String,除非您不在乎它是String还是Number。     
用精度方法扩展数学对象
Object.defineProperty(Math, \'precision\',{
   value: function (value,precision,type){
             var v = parseFloat(value),
                 p = Math.max(precision,0)||0,
                 t = type||\'round\';
              return (Math[t](v*Math.pow(10,p))/Math.pow(10,p)).toFixed(p);
          }
    });

console.log(
    Math.precision(3.1,3), // round 3 digits 
    Math.precision(0.12345,2,\'ceil\'), // ceil 2 digits
    Math.precision(1.1) // integer part
)
parseInt(number * 100) / 100;
为我工作。     
这是仅使用下限进行舍入的另一种解决方案,这意味着确保计算出的金额不会大于原始金额(有时需要交易):
Math.floor(num* 100 )/100;
    
函数numberWithCommas(number){
var newval = parseFloat(Math.round(number * 100) / 100).toFixed(2);

return newval.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");
}     
您可以尝试以下代码:
    function FormatNumber(number, numberOfDigits = 2) {
        try {
            return new Intl.NumberFormat(\'en-US\').format(parseFloat(number).toFixed(2));
        } catch (error) {
            return 0;
        }
    }

    var test1 = FormatNumber(\'1000000.4444\');
    alert(test1); // 1,000,000.44

    var test2 = FormatNumber(100000000000.55555555, 4);
    alert(test2); // 100,000,000,000.56
    
(num + \"\").replace(/^([0-9]*)(\\.[0-9]{1,2})?.*$/,\"$1$2\")
    
这是我解决问题的方法:
parseFloat(parseFloat(floatString).toFixed(2));
    

要回复问题请先登录注册