使用jquery将小数或小数舍入到第16位

时间:2016-02-27 04:08:56

标签: jquery math decimal rounding fractions

我正在使用此代码将小数转换为分数:

Number.prototype.fraction=fraction;
        function fraction(decimal){
            if(!decimal){
                decimal=this;
            }
            whole = String(decimal).split('.')[0];
            decimal = parseFloat("."+String(decimal).split('.')[1]);
            num = "1";
            for(z=0; z<String(decimal).length-2; z++){
                num += "0";
            }
            decimal = parseInt(decimal*num);
            num = parseInt(num);
            for(z=2; z<decimal+1; z++){
                if(decimal%z==0 && num%z==0){
                    decimal = decimal/z;
                    num = num/z;
                    z=2;
                }
            }
            return ((whole==0)?"" : whole+" ")+decimal+"/"+num;
        }

这有效,但有一些我似乎无法解决的问题。首先,小数点后带有长(或无限)数字的数字会使页面无效,因此在使用之前我必须使用.round()手动限制输入。其次,我需要能够将分数值四舍五入到最接近的第16位。

我意识到这是一个特别棘手的问题,因为我已经发现在谷歌周围拖了两天,但希望有人知道该怎么做。我愿意接受任何解决方案。

2 个答案:

答案 0 :(得分:1)

尝试:

Math.round( number * 16) / 16

例如:

Math.round(32578.8252789345798345987683476983476908347569873490867309487609875690860*16)/16

给出

32578.8125

这是= 32578 + 13/16

答案 1 :(得分:0)

  

我需要能够将分数值四舍五入到最接近的第16个

尝试使用1/161循环,Array.prototype.reduce()for Math.min()和Math.round()之间数字的数组>

var s = 1/16, d = [];

for (var i = s, n = 0; i < 1; i += s, n++) {
  d[n] = i
}

function f16(num) {
  return num
    .split(".")
    .reduce(function(a, b, index, arr) {
      var curr = +("." + b), j;
      for (var i = 0; i < d.length; i++) {
        if (Math.min(curr, d[i]) === curr) {
          j = " " + (i + 1) + "/" + (d.length + 1);
          break;
        }
      };
      return j === 0 ? +a + Math.round(curr) : a + j;
    })
}

document.onchange = function(event) {
  document.querySelector("output").innerHTML = f16(event.target.value)
}
<input type="number" step="0.1" />
<output></output>