假设我有一个值15.7784514,我想把它显示为15.77,没有舍入。

var num = parseFloat(15.7784514);
document.write(num.toFixed(1)+"<br />");
document.write(num.toFixed(2)+"<br />");
document.write(num.toFixed(3)+"<br />");
document.write(num.toFixed(10));

结果:

15.8
15.78
15.778
15.7784514000 

如何显示15.77?


当前回答

下面是另一个保存.toFixed([digits])函数而不舍入浮点变量的变体:

Number.prototype.toRealFixed = function(digits) {
    return Math.floor(this.valueOf() * Math.pow(10, digits)) / Math.pow(10, digits);
};

和要求:

var float_var = 0.02209062;
float_var.toRealFixed();

其他回答

另一个单线解决方案:

number = Math.trunc(number*100)/100

我使用100是因为你想截断到第二位,但更灵活的解决方案是:

number = Math.trunc(number*Math.pow(10, digits))/Math.pow(10, digits)

其中digits是要保留的十进制数字的数量。

看数学。详细信息和浏览器兼容性的Trunc规范。

谢谢,Martin Varmus

function floorFigure(figure, decimals){
     if (!decimals) decimals = 2;
     var d = Math.pow(10,decimals);
     return ((figure*d)/d).toFixed(decimals);
};

floorFigure(123.5999)    =>   "123.59"
floorFigure(123.5999, 3) =>   "123.599"

我做了一个简单的更新,我得到了适当的舍入。更新如下

return ((figure*d)/d).toFixed(decimals);

删除parseInt()函数

已经有一些合适的答案与正则表达式和算术计算,你也可以试试这个

function myFunction() {
    var str = 12.234556; 
    str = str.toString().split('.');
    var res = str[1].slice(0, 2);
    document.getElementById("demo").innerHTML = str[0]+'.'+res;
}

// output: 12.23

const toFixed = (value) => value. tostring ().slice(0,5);

我固定使用以下简单的方法-

var num = 15.7784514;
Math.floor(num*100)/100;

结果是15.77