【问题标题】:How to assign a variable type to variables in an object [duplicate]如何将变量类型分配给对象中的变量[重复]
【发布时间】:2013-08-07 16:59:36
【问题描述】:

这里是代码

var m = new Object();
m.p1 = 37.7;
m.p2 = 37.7;
...

function addSubtract(pn){
switch (pn) {
    case 1:
        var amt = prompt("Enter a value");
        if (amt != null)
        {
        m.p1 += amt;
        }
    break;
    }
}

基本上当我输入 1 时,m.p1 的值变为 37.71 而不是 38.7

然后我输入 1.0,它显示 37.711.0。我发现它是在进行连接而不是加法。 我试图找到一种声明类型的方法,但我不知道如何在对象的变量中使用它。

我更像是一个 C++ 人,我在这里缺少一些明显的东西。我只是在 Google 上找不到它。

那么我必须为其分配一个类型还是有另一种方法来强制算术加法?

【问题讨论】:

  • 由于您要添加小数,请查看 parseFloat() 和 toFixed() javascript 方法。搜索 SO 以添加小数。这在 javascript 中有点奇怪。

标签: javascript variables var


【解决方案1】:

你需要parseFloat()Number()prompt()返回的字符串。

【讨论】:

  • 或者,您可以强制进行隐式转换:m.p1 += (+amt);
  • 我不认为 parseFloat 应该被建议用于用户输入...parseFloat("23.34asdf") 变为 23.34,而 Number("23.34asdf") 将变为 NaN。我宁愿确保输入的内容按原样进行
  • @Ian 这一切都取决于 OP 如何处理边缘情况。
【解决方案2】:

prompt() 的结果将是一个字符串。如果将数字添加到字符串中,则会将数字转换为字符串并执行连接。

要将字符串转换为浮点数,请使用以下方法之一:

var amt = parseFloat(prompt("Enter a value"));

...或:

var amt = +prompt("Enter a value");

...或:

var amt = Number(prompt("Enter a value"));

请注意,当使用parseFloat() 时,末尾的任何额外的非数字字符都将被忽略,但是当使用一元+ 方法或Number() 时,如果字符串有额外的字符,您将得到NaN

> parseFloat('1.0foo')
1
> +'1.0foo'
NaN
> +'1.0'
1

【讨论】:

    【解决方案3】:
    if (amt != null) m.p1 += Number(amt);
    

    这应该可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 2021-01-01
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多