你如何在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}}
🙂