Convert a decimal number to a fraction / rational number

前端 未结 11 1817
情歌与酒
情歌与酒 2020-12-01 16:36

In JavaScript, is there any way to convert a decimal number (such as 0.0002) to a fraction represented as a string (such as \"2/10000\")?

I

11条回答
  •  情深已故
    2020-12-01 16:54

    I did what popnoodles suggested and here it is

    function FractionFormatter(value) {
      if (value == undefined || value == null || isNaN(value))
        return "";
    
      function _FractionFormatterHighestCommonFactor(u, v) {
          var U = u, V = v
          while (true) {
            if (!(U %= V)) return V
            if (!(V %= U)) return U
          }
      }
    
      var parts = value.toString().split('.');
      if (parts.length == 1)
        return parts;
      else if (parts.length == 2) {
        var wholeNum = parts[0];
        var decimal = parts[1];
        var denom = Math.pow(10, decimal.length);
        var factor = _FractionFormatterHighestCommonFactor(decimal, denom)
        return (wholeNum == '0' ? '' : (wholeNum + " ")) + (decimal / factor) + '/' + (denom / factor);
      } else {
        return "";
      }
    }
    

提交回复
热议问题