Javascript舍入/舍入/固定小数
我对javascript如何对数字进行除法和舍入有疑问 我有两个浮点数,0.11和0.12 我想计算这两个数字的中间值,并将其四舍五入到最接近的最高值,价格为2位小数 例如,如果我在计算器上这样做 0.11+0.12/2=0.115,我需要将它四舍五入到0.12,因为它在中间或以上 如果我用Javascript来做这件事,我就得不到一个准确的数字 例如Javascript舍入/舍入/固定小数,javascript,floating-accuracy,Javascript,Floating Accuracy,我对javascript如何对数字进行除法和舍入有疑问 我有两个浮点数,0.11和0.12 我想计算这两个数字的中间值,并将其四舍五入到最接近的最高值,价格为2位小数 例如,如果我在计算器上这样做 0.11+0.12/2=0.115,我需要将它四舍五入到0.12,因为它在中间或以上 如果我用Javascript来做这件事,我就得不到一个准确的数字 例如 var high = parseFloat(0.12); var low = parseFloat(0.11); var mid = (hig
var high = parseFloat(0.12);
var low = parseFloat(0.11);
var mid = (high + low) / 2;
document.getElementById("demo1").innerHTML = mid;
document.getElementById("demo2").innerHTML = mid.toFixed(2);
var another = mid.toFixed(3);
document.getElementById("demo3").innerHTML =another;
var last = Math.floor(another)
document.getElementById("demo4").innerHTML =last;
如有任何意见,将不胜感激 如
0.1149999999999999
所示,结果略小于0.115
。这是因为0.11
和0.12
不能用浮点数精确表示
当您不想处理浮点错误时,直接处理整数通常更容易。小整数由浮点数精确表示
您可以先乘以100,然后进行取整,以确保您的数字是整数,只有在得到最终结果后才能进行除法:
var a = Math.round(100 * parseFloat("0.12")) // 12
var b = Math.round(100 * parseFloat("0.11")) // 11
var mid = (a + b) / 2 // 11.5.
// 0.5 can be represented exactly in floating point for small numbers.
var midRound = (Math.round(mid) / 100).toFixed(2) // "0.12"
需要乘(整数部分的训练,即找到中间部分,然后除以以重新转换到原点):
浮点不是精确的,你不能依赖它,你会得到意想不到的结果。一切
*100
防止不精确
.toFixed()
进行舍入
var a=0.11;
var b=0.12;
c=parseFloat(((a*100)+(b*100))/200.toFixed(2));
控制台日志(c)代码>
function myMid(high,low, precision){
var precision=2
var convFactor = Math.pow(10,precision);
return
(Math.round((low*convFactor+high*convFactor)/2)/convFactor).toFixed(precision);
}