如果Else Statement Disaster

时间:2017-01-28 19:02:47

标签: javascript html

今天我决定制作一个简单的js代码,接受一个数字(以米为单位),并决定使用哪个适当的公制单位。代码结果比我预期的要复杂一些,但是当我找到它们时,我能够找出大部分错误(即使它意味着重新安排了我的所有代码)。但是,当谈到我的if / else语句时,我无法弄明白。如果我输入的数字小于1则没有任何反应。如果我输入的数字超过9,则每次都会记录相同的数字。结构本身可能需要一些工作,但如果有人可以帮助我使用if / else语句,我会非常感激。这是代码(在主体加载时调用init):

function init() {
            var x = prompt("How many meters?");
            convertMetricMeters(x);

            function convertDown(x) {
                if (0.1 >= x >= 0.99) {
                    console.log("deci");
                }

                else if (0.100 >= x >= 0.999) {
                    console.log("centi");
                }

                else if (0.1000 >= x) {
                    console.log("milli");
                }

                else {
                    console.log("error");
                }   
            }               

            function convertUp(x) {
                if (1 <= x <= 99) {
                    console.log("deca");
                }

                else if (100 <= x <= 999) {
                    console.log("hecto");
                }

                else if (1000 <= x) {
                    console.log("kilo");
                }

                else {
                    console.log("error");
                }
            }

            function convertMetricMeters(x) {
                if (x < 1) {
                    convertDown(x);
                }

                else if (x > 9) {
                    convertUp(x);
                }

                else {
                    console.log("Appropriate Metric Unit");
                }
            }
        }

4 个答案:

答案 0 :(得分:1)

在javascript

中使用&&作为AND运算符

将这些100 <= x <= 999转换为100 <= x && x <= 999

答案 1 :(得分:1)

您可以稍微简化检查,如果条件为真则返回。

function convertDown(x) {
    if (x < 0.01) {
        console.log("milli");
        return;
    }
    if (x < 0.1) {
        console.log("centi");
        return;
    }
    if (x < 1) {
        console.log("deci");
        return;
    }
    console.log("error");
}             

答案 2 :(得分:0)

您的代码有两种错误。一个很容易修复,你必须在&&语句中的两个条件之间添加if

现在来到另一部分,不到1项。它需要一个不同的逻辑。好吧,你的数学似乎需要一点关注。 0.1与0.100相同,与0.1000相同

我已更新代码以查找小数点后的位数,然后查找console.log。

更新的代码将是:

  function init() {
        var x = prompt("How many meters?");
        convertMetricMeters(x);

        function convertDown(x) {

            // checks the number of digits after decimal point
            decimals = (x.split('.')[1] || []).length

            if (decimals == 1 || decimals == 2) {
                console.log("deci");
            }

            else if (decimals == 3) {
                console.log("centi");
            }

            else if (decimals == 4) {
                console.log("milli");
            }

            else {
                console.log("error");
            }   
        }               

        function convertUp(x) {
            if (1 <= x && x <= 99) {
                console.log("deca");
            }

            else if (100 <= x && x <= 999) {
                console.log("hecto");
            }

            else if (1000 <= x) {
                console.log("kilo");
            }

            else {
                console.log("error");
            }
        }

        function convertMetricMeters(x) {
            if (x < 1) {
                convertDown(x);
            }

            else if (x > 9) {
                convertUp(x);
            }

            else {
                console.log("Appropriate Metric Unit");
            }
        }
    }

工作jsfiddle示例:https://jsfiddle.net/w7pf3moL/

答案 3 :(得分:0)

只有1种方法convert(float x)的简化版:

function init() {
  var x = prompt("How many meters?");
  convertMetricMeters(x);
  function convert(x) {
    if (x < 0.01) console.log("milli");
    else if (x < 0.1) console.log("centi");
    else if (x < 1) console.log("deci");
    else if (x < 10) console.log("meter");
    else if (x < 100) console.log("deca");
    else if (x < 1000) console.log("hecto");
    else console.log("kilo");
  }
  function convertMetricMeters(x) {
    if (x > 0) {
      convert(x);
    } else {
      console.log("Appropriate Metric Unit");
    }
  }
}
init();