[英]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.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"
需要相乘(对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.