-1

(私の英語でごめんなさい=/) これは疑似です:

function lnko(a, b)

  -if a = b then lnko := a 

  -if a < b then lnko := lnko(a, b-a) 

  -if a > b then lnko := lnko(a-b, b) 

function end

そして私のコードは次のとおりです。

<html>
<head>
    <script type="text/javascript">
        function run()
            {
                var a = document.getElementById("a").value;
                var b = document.getElementById("b").value;

                var s = lnko(a,b)
                document.write(a+"/"+b+"<br>"+(a/s)+"/"+(b/s));
            //  document.write("<br>"+s)
            }
        function lnko(a,b)
            {
                alert(a+"..."+b)
                if (a==b)
                    {
                        return a;
                    }
                if (a<b)
                    {
                        return lnko(a,(b-a));
                    }
                if (a>b)
                    {
                        return lnko((a-b),b);
                    }
            }
    </script>
</head>
<body>
    <input type="text" id="a" />
    <input type="text" id="b" />
    <input type="button" onclick="run()" />
</body>

問題は、10/5、15/3 などで lnko を呼び出しても何も起こらないことです..

4

1 に答える 1

6

と を取得するab、得られるのは数値ではなく文字列であるため、lnko期待どおりに動作しません。具体的には、それが比較で問題を引き起こしています: 10 > 5but "10" < "5".

これを修正する簡潔な方法は次のとおりです。

var a = +document.getElementById("a").value;
var b = +document.getElementById("b").value;

Pascal Belloncle が指摘しているように、代わりに次を使用できます。

var a = parseInt(document.getElementById("a").value, 10);
var b = parseInt(document.getElementById("b").value, 10);

大きな違いは、不正な「数字」がどのよう42aに扱われるかです。最初の形式 ( +doc...) は、値を数値に変換できずに戻りますが、可能なものNaNparseInt解析して戻ります42

于 2013-02-16T00:25:09.387 に答える