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

我对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 = (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);
}