2015-08-14 58 views
0

我正面临一个问题,如果有人向我解释我的功能出了什么问题,我会很喜欢。正好有两位小数的格式编号问题

见下面的代码:

如果用完=>数(10000.88,2)

任何人都可以解释我为什么代替10000.88

其中如果我运行数输出10000.87(11111.88 ,2)输出正确11111.88 所有其他输出都是正确的。

function number(value, decPos) { 
 
     
 
    return Math.floor(Math.abs(value) * Math.pow(10, decPos))/Math.pow(10, decPos); 
 
     
 
} 
 

 
document.write("<div>" + number(10, 2) + '</div>'); 
 
document.write("<div>" + number(10.8888, 2) + '</div>'); 
 
document.write("<div>" + number(100.8888, 2) + '</div>'); 
 
document.write("<div>" + number(1000.88, 2) + '</div>'); 
 
document.write("<div>" + number(10000.888, 2) + '</div>'); 
 
// magic 
 
document.write("<div>" + number(10000.88, 2) + '</div>'); 
 

 
document.write("<div>" + number(100000.8888, 2) + '</div>'); 
 

 
// magic 
 
document.write("<div>" + number(8368.88, 2) + '</div>'); 
 

 
document.write("<div>" + number(11111.8888, 2) + '</div>'); 
 
document.write("<div>" + number(11111.88, 2) + '</div>');
<div id="result"></div>

+1

你有没有意识到有toFixed()? – epascarello

+1

可能重复[浮点数学是否被破坏?](http://stackoverflow.com/questions/588004/is-floating-point-math-broken) – HPierce

+1

舍入错误... – brso05

回答

1

这是一个舍入误差,精度无法使用双打或浮筒保证。

1

这不是多么圆润的作品,你会得到不准确的数字。

但是如果你必须:

function subdec(value, decimals) 
{ 
    decimals = decimals || 2; 
    var parts = value.toString().split('.'); 

    if (parts[1]) { 
     parts[1] = parts[1].substr(0, decimals); 
     return parseFloat(parts.join('.')); 
    } 

    return value; 
} 

添加到这个函数的调用您number()功能。

0

您可以使用此函数生成预期结果。

function number(value, decPos) { 
    str = String(value).split("."); 
    if (str[1]) { 
     return str[0]+"."+str[1].substring(0, decPos); 
    } 
    return str[0]; 
} 
0

我调整了一下你的代码,以便利用.toFixed()函数。我做到了这样decPos也决定了多少小数位.toFixed()将切断。这是你正在寻找的功能吗?

function number(value, decPos) { 
 
     
 
    return Math.floor((Math.abs(value) * Math.pow(10, decPos)).toFixed(decPos))/Math.pow(10, decPos); 
 
     
 
} 
 

 
document.write("<div>" + number(10, 2) + '</div>'); 
 
document.write("<div>" + number(10.8888, 2) + '</div>'); 
 
document.write("<div>" + number(100.8888, 2) + '</div>'); 
 
document.write("<div>" + number(1000.88, 2) + '</div>'); 
 
document.write("<div>" + number(10000.888, 2) + '</div>'); 
 
// magic 
 
document.write("<div>" + number(10000.88, 2) + '</div>'); 
 

 
document.write("<div>" + number(100000.8888, 2) + '</div>'); 
 

 
// magic 
 
document.write("<div>" + number(8368.88, 2) + '</div>'); 
 

 
document.write("<div>" + number(11111.8888, 2) + '</div>'); 
 
document.write("<div>" + number(11111.88, 2) + '</div>'); 
 
document.write("<div>" + number(10000.888, 3) + '</div>'); 
 
// magic 
 
document.write("<div>" + number(10000.88, 3) + '</div>');
<div id="result"></div>

相关问题