JavaScript舍入/舍入/固定于小数点

时间:2018-06-23 18:01:07

标签: javascript floating-accuracy

我对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/

任何输入将不胜感激。

3 个答案:

答案 0 :(得分:0)

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"

答案 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);