我对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 :(得分:0)
如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"
答案 1 :(得分:0)
需要相乘(对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);
}
浮点数不够精确,您不能依靠它,您会得到意想不到的结果。
答案 2 :(得分:0)
一切*100
,以防止出现错误
.toFixed()
进行四舍五入
var a = 0.11;
var b = 0.12;
c = parseFloat((((a*100) + (b*100))/200).toFixed(2));
console.log(c);