2

「11/4」を1.25に変換するにはどうすればよいですか?

ユーザー入力を取得して、同等の論理数値に変換したいと思います。2RとR2は2である必要があるため、論理的と言います(カイロプラクティック調整の測定と関係があります)。混合分数を使用できるようになるまで、すべてが機能しました。

このためのライブラリはありますか?

動作しない唯一の数値は「11/4」であり、これは誤って「2.75」に変換されます。

    // Sample input
    var values = ["2.5", "1 1/4", "1/4", "2 R", "R 2"];

    function l(msg) {
        console.log(msg)
    }

    function toDecimal(x) {
        if (x.indexOf('/') != -1) {
            var parts = x.split(" ")
            var decParts = parts[1].split("/")
            return parseInt(parts[0], 10) + (parseInt(decParts[0], 10) / parseInt(decParts[1], 10))
        } else {
            return x
        }
    }

    function total_it_up(values){
        var total = 0,
            value = 0

        if(values === undefined)
            return 0

        $.each(values, function(index, value){
            value = value.replace(/[^0-9./]+/g, "")
            value = eval(value)
            l(value)
            total += parseFloat(value)
        })

        return total
    }

解決

    function toDecimal(x) {
        if (x.indexOf('/') != -1) {
            var parts = x.split(" ")
            var decParts;
            if (parts.length > 1) {
                decParts = parts[1].split("/");
            }
            else {
                decParts = parts[0].split("/");
                parts[0] = 0;
            }
            return parseInt(parts[0], 10) + (parseInt(decParts[0], 10) / parseInt(decParts[1], 10))
        } else {
            return x
        }
    }


    function total_it_up(values){
        var total = 0;

        if(values === undefined)
            return 0;

        $.each(values, function(index, value){
            total += parseFloat(toDecimal($.trim(value.replace(/[^0-9./ ]+/g, ""))));
        })

        return total;
    }
4

3 に答える 3

2

toDecimal()の呼び出しは見当たらないので、$.eachループが元のコードで呼び出していると想定しています。その場合、正規表現が1と1/4の間のスペースを削除し、11/4、つまり2.75になるため、11/4は2.75として表示されます。スペースを許可しますが$.trim、その結果、先頭または末尾のスペースが削除されます。また、を使用する必要はありませんeval()

于 2012-11-02T17:46:20.153 に答える
0

以前、JSの代わりにperlを誤って投稿しました。これが正しいものです。掃除をしてください。

    <html>
  <body>
    <script language=javascript>


 var txt='4 1/2';

      var re1='(\\d+)'; // Integer Number 1
      var re2='.*?';    // Non-greedy match on filler
      var re3='(\\d+)'; // Integer Number 2
      var re4='.*?';    // Non-greedy match on filler
      var re5='(\\d+)'; // Integer Number 3

      var p = new RegExp(re1+re2+re3+re4+re5,["i"]);
      var m = p.exec(txt);
      if (m != null)
      {
          var int1=m[1];
          var int2=m[2];
          var int3=m[3];
          document.write("("+int1.replace(/</,"&lt;")+")"+"("+int2.replace(/</,"&lt;")+")"+"("+int3.replace(/</,"&lt;")+")"+"\n");
      }
    </script>
  </body>
</html>
于 2012-11-02T17:39:15.447 に答える
0

これはひどいです。

function ConvertFraction(fraction)
{
     eval(fraction.replace('R','').trim().replace(' ', '+'))
}
于 2012-11-02T17:45:15.790 に答える