繁体   English   中英

JavaScript舍入/舍入/ to固定在小数点后

[英]Javascript round / floor / toFixed on decimals

我对javascript如何对数字进行除法和舍入有问题。

我有两个float,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;

http://jsfiddle.net/gzqwbp6c/9/

任何输入将不胜感激。

0.11499999999999999所示,结果略小于0.115 这是因为使用浮点数无法精确地表示0.110.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"

需要相乘(对int部分进行锻炼,即找到中点,然后除以重新转换为原点):

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

浮动不精确,您不能依靠它,您会得到意想不到的结果。

一切*100以防止错误

.toFixed()进行舍入

 var a = 0.11; var b = 0.12; c = parseFloat((((a*100) + (b*100))/200).toFixed(2)); console.log(c); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM