I have a number var x = 2.305185185185195;
x = x.toFixed(5);
x = 2.30519
但我需要不进行四舍五入的值,即 2.30518
我查看了一些保留两位小数的帖子,但没有找到保留五位小数的方法。
如果有帮助就感激不尽。
I have a number var x = 2.305185185185195;
x = x.toFixed(5);
x = 2.30519
但我需要不进行四舍五入的值,即 2.30518
我查看了一些保留两位小数的帖子,但没有找到保留五位小数的方法。
如果有帮助就感激不尽。
function getFlooredFixed(v, d) {
return (Math.floor(v * Math.pow(10, d)) / Math.pow(10, d)).toFixed(d);
}
var x = 2.305185185185195;
document.write(getFlooredFixed(x, 5));
slice()
在数字小于 1,000 时工作速度提高了3倍,在数字小于1,000,000时速度提高了7倍... (slice()
的工作时间是一个常量,与数字无关) - Andrew EvtgetFlooredFixed(4.27, 5)
==> 4.26999
- MagyaDEVgetFlooredFixed(10.20, 2)
==> 10.19
- Roman Belovfunction cutNumber(number, digitsAfterDot) {
const str = `${number}`;
return str.slice(0, str.indexOf('.') + digitsAfterDot + 1);
}
const x = 2.305185185185195;
console.log(cutNumber(x, 5)); // 2.30518
这种方法很快(https://jsfiddle.net/93m8akzo/1/),并且其执行时间不取决于number
或digitsAfterDot
的值。
您还可以在给定的演示中“玩耍”这两个函数,以更好地理解它们的作用。
您可以在这里阅读有关slice()
方法的更多信息-MDN文档
注意: 该函数仅为示例,请勿在生产应用程序中使用。 您应该绝对添加输入值验证和错误处理!
Math.trunc() 函数通过删除任何小数位返回数字的整数部分。
因此,您可以将数字乘以10^n(其中n是所需精度的数字),使用 Math.trunc()
截断小数部分,除以相同的数字(10^n),并应用 toFixed()
进行格式化(以便获得2.30的形式,而不是例如2.3)
var x = 2.305185185185195;
console.log((Math.trunc(x*100000)/100000).toFixed(5));
我通过在小数为5时添加一点点来解决了这个问题,然后像往常一样四舍五入:
function(value, decimals) {
var decimals = decimals || 2;
if( isNaN(value) ){ return 0; }
var decimalPart = value.toString().trim().split('.').pop(),
extra = decimalPart.substr(decimals, decimalPart.length - decimals);
if( extra == '5' &&
decimalPart.length > decimals
){
value = parseFloat(value) + (1 / ( Math.pow(10, decimals + 5) ) );
}
return Number( parseFloat( value ).toFixed( decimals ) );
}