不四舍五入的toFixed方法

6

I have a number var x = 2.305185185185195;

x = x.toFixed(5);

x = 2.30519 但我需要不进行四舍五入的值,即 2.30518

我查看了一些保留两位小数的帖子,但没有找到保留五位小数的方法。

如果有帮助就感激不尽。


可能是重复的问题,关于显示两位小数,不进行四舍五入 - Pietro
4个回答

12
你可以使用一个合适的因子进行取整,然后返回除法的结果。
基本上这个解决方案会用10的d次方将小数点向左移动,并得到那个整数,再除以前面的因子就能得到正确的数字。
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 Evt
getFlooredFixed(4.27, 5) ==> 4.26999 - MagyaDEV
getFlooredFixed(10.20, 2) ==> 10.19 - Roman Belov
@RomanBelov,对于一些数字,它无法工作,因为该值不能转换为具有所有必要位数的浮点数。 - Nina Scholz

4
如果您只需要浮点数的“部分”而不需要四舍五入,可以直接“截取”它:
function 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/),并且其执行时间不取决于numberdigitsAfterDot的值。

您还可以在给定的演示中“玩耍”这两个函数,以更好地理解它们的作用。


您可以在这里阅读有关slice()方法的更多信息-MDN文档


注意: 该函数仅为示例,请勿在生产应用程序中使用。 您应该绝对添加输入值验证和错误处理!


1
请在您的回答中描述问题是什么,以及这段代码如何解决它,以帮助其他人理解这个答案。 - FZs
cutNumber(0.11111111111111125, 17) -> '0.11111111111111124' - undefined

1

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));

1
@FZs 添加了描述。 - Addis

0

我通过在小数为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 ) );
        
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接