【问题标题】:Javascript problems with a function not working (it converts fractions into decimals)函数不起作用的 Javascript 问题(它将分数转换为小数)
【发布时间】:2015-02-24 20:08:19
【问题描述】:

假设我有一个字符串(比如分数);

var num = "1/2";

为什么会这样:

var y = num.split(' ');
if (y.length > 1) {
    var z = y[1].split('/');
    var a = (+y[0] + (z[0] / z[1]));
    num = a;
} else {
    z = y[0].split('/');
    if (z.length > 1) {
        a = (z[0] / z[1]);
        num = a;
    }
}

alert(num); //The alert box shows my variable now as a decimal.

这不是:

function parseFractions(x) {
    var y = x.split(' ');
    if (y.length > 1) {
        var z = y[1].split('/');
        var a = (+y[0] + (z[0] / z[1]));
        x = a;
    } else {
        z = y[0].split('/');
        if (z.length > 1) {
            a = (z[0] / z[1]);
            x = a;
        }
    }
}

parseFractions(num); //Here I call my function.

alert(num);
//The alert box does not even show up. The fraction isn't converted into a decimal.

这基本上是一样的,唯一的区别是在第二个中我尝试将它变成一个函数,所以我每次尝试将分数转换为小数时都不必重复这些代码行。

那我做错了什么?我想用一个函数来完成什么?感谢您对这个问题的任何了解!

【问题讨论】:

  • “按引用传递”和“按值传递”。
  • 如果alert 没有出现,则您遇到了运行时错误。这可能是一个简单的问题,如果您learn how to debug JavaScript,您可以自己解决。设置断点、检查变量……不难发现代码中发生了什么。
  • Uncaught type error: undefined is not a function 让我找到它的来源

标签: javascript function decimal fractions


【解决方案1】:

num 的值没有更新,它不是通过引用传递的。

function parseFractions(x) {
    var y = x.split(' ');
    if (y.length > 1) {
        var z = y[1].split('/');
        var a = (+y[0] + (z[0] / z[1]));
        x = a;
    } else {
        z = y[0].split('/');
        if (z.length > 1) {
            a = (z[0] / z[1]);
            x = a;
        }
    }
    return x;
}

num = parseFractions(num);  //set num with the value return from the method
alert(num);

【讨论】:

  • 谢谢!这就像一种魅力,也教会了我一些新的东西。这确实是正确答案。
  • @wessy:所以我猜代码//The alert box does not even show up. 中的注释不正确。它出现了,但您没有得到预期的结果。如果您提出问题,请确保正确描述所有内容。
  • @Wyatt 我做到了,我想它不会让我在 5 分钟内接受答案,所以我不得不等待。
  • 有道理,现在必须有人编辑它,这样我才能取消投票。
【解决方案2】:

你需要返回你的价值

在函数末尾添加一个 return

return x;

然后用

调用函数
alert(parseFractions(num)); //Here I call my function.

【讨论】:

  • 你不需要这样称呼它,看看我的例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-21
  • 2016-06-02
相关资源
最近更新 更多