你如何在Javascript中舍入到小数点后1位?

你可以在javascript中舍入一个数字到小数点后的1个字符(正确舍入)吗?

我尝试了* 10,round,/ 10,但在int结尾留下了两位小数。

Math.round( num * 10) / 10作品,这里是一个例子…

 var number = 12.3456789; var rounded = Math.round( number * 10 ) / 10; // rounded is 12.3 

如果你想要它有一个小数位,即使这将是一个0,然后添加…

 var fixed = rounded.toFixed(1); // fixed is always to 1dp // BUT: returns string! // to get it back to number format parseFloat( number.toFixed(2) ) // 12.34 // but that will not retain any trailing zeros // so, just make sure it is the last step before output, // and use a number format during calculations! 

编辑:添加与精确度函数的圆…

使用这个原则,作为参考,这里是一个方便的小圆函数,需要精度…

 function round(value, precision) { var multiplier = Math.pow(10, precision || 0); return Math.round(value * multiplier) / multiplier; } 

…使用…

 round(12345.6789, 2) // 12345.68 round(12345.6789, 1) // 12345.7 

…默认舍入到最接近的整数(精度为0)…

 round(12345.6789) // 12346 

…可以用来圆到最近的10或100等…

 round(12345.6789, -1) // 12350 round(12345.6789, -2) // 12300 

…正确处理负数…

 round(-123.45, 1) // -123.4 round(123.45, 1) // 123.5 

…可以与toFixed结合以格式一致的string…

 round(456.7, 2).toFixed(2) // "456.70" 
 var number = 123.456; console.log(number.toFixed(1)); // should round to 123.5 

如果你使用Math.round(5.01)你会得到5而不是5.0

如果你使用toFixed你遇到四舍五入的 问题 。

如果你想两全其美的结合在一起:

 (Math.round(5.01 * 10) / 10).toFixed(1) 

您可能需要为此创build一个函数:

 function roundedToFixed(_float, _digits){ var rounder = Math.pow(10, _digits); return (Math.round(_float * rounder) / rounder).toFixed(_digits); } 

lodash有一个round方法:

 _.round(4.006); // => 4 _.round(4.006, 2); // => 4.01 _.round(4060, -2); // => 4100 

文档

来源 。

我投票toFixed() ,但是,对于logging,这是另一种使用位移的方式将数字转换为int。 所以,它总是趋于零(正数下降,负数)。

 var rounded = ((num * 10) << 0) * 0.1; 

但是,嘿,因为没有function调用,所以它很快就是坏的。 🙂

这里有一个使用string匹配的方法:

 var rounded = (num + '').replace(/(^.*?\d+)(\.\d)?.*/, '$1$2'); 

我不推荐使用string变体,只是说。

试试这个:

 var original=28.453 

1)//将“原始”舍入到两位小数

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

2)//将“原始”舍入到1位小数

 var result = Math.round (original * 10) / 10 //returns 28.5 

3)//将8.111111舍入到3位小数

 var result = Math.round (8.111111 * 1000) / 1000 //returns 8.111 

更简单,更容易实施…

有了这个,你可以创build一个函数来做:

 function RoundAndFix (n, d) { var m = Math.pow (10, d); return Math.round (n * m) / m; } 

x =数字,n =小数位数:

 function round(x, n) { return Math.round(x * Math.pow(10, n)) / Math.pow(10, n) } 
 var num = 34.7654; num = Math.round(num * 10) / 10; console.log(num); // Logs: 34.8 

完成最佳答案:

 var round = function ( number, precision ) { precision = precision || 0; return parseFloat( parseFloat( number ).toFixed( precision ) ); } 

input参数号可能“不”总是一个数字,在这种情况下.toFixed不存在。

如果你的方法不起作用,请发布你的代码。

但是,您可以完成四舍五入的任务:

 var value = Math.round(234.567*100)/100 

会给你234.56

同样

  var value = Math.round(234.567*10)/10 

会给234.5

通过这种方式,你可以在上面使用的常量的地方使用一个variables。

这似乎是可靠的工作,我扔在它的任何东西:

 function round(val, multiplesOf) { var s = 1 / multiplesOf; var res = Math.ceil(val*s)/s; res = res < val ? res + multiplesOf: res; var afterZero = multiplesOf.toString().split(".")[1]; return parseFloat(res.toFixed(afterZero ? afterZero.length : 0)); } 

它四舍五入,所以你可能需要根据用例修改它。 这应该工作:

 console.log(round(10.01, 1)); //outputs 11 console.log(round(10.01, 0.1)); //outputs 10.1 

如果你关心适当的四舍五入,那么:

 function roundNumericStrings(str , numOfDecPlacesRequired){ var roundFactor = Math.pow(10, numOfDecPlacesRequired); return (Math.round(parseFloat(str)*roundFactor)/roundFactor).toString(); } 

否则,如果你不这样做,那么你已经有以前的post回复

 str.slice(0, -1) 

Math.round( num * 10) / 10不起作用。

例如, 1455581777.8-145558160.4给你1310023617.3999999

所以只能使用num.toFixed(1)

小angular度filter,如果有人想要它:

 angular.module('filters').filter('decimalPlace', function() { return function(num, precision) { var multiplier = Math.pow(10, precision || 0); return Math.round(num * multiplier) / multiplier; }; }); 

如果通过使用:

 {{model.value| decimalPlace}} {{model.value| decimalPlace:1}} {{model.value| decimalPlace:2}} 

🙂