如何获取用户输入并将字符串转换为可在函数中以数学方式使用的整数?

时间:2013-07-19 21:53:54

标签: javascript

如何获取用户输入并将字符串转换为可以在函数中以数学方式使用的整数?

完全没有编码和尝试构建一个简单的计算器。我不确定我做错了什么,任何帮助都将不胜感激。

    function TLV() 
    {
            var TLVday = Integer.valueOf("getTLVdate");
        var OBday = Integer.valueOf("getOBdate");
        if (TLVday<OBday)
        {
            DD = OBday + 10;
        }
        else
        {
            DD = OBday + 30;
        }
        document.getElementById("TLVoutput").innerHTML=DD;
    }


<form name="myform" id="frm1">
    <table style="border:0;">
    <tr>
    <td>OB Start Day:</td>
    <td><input type="text" id="getOBdate"/></td>
    </tr>
    <tr>
    <td>TLV Start Day: </td>
    <td><input type="text" id="getTLVdate"/></td>
    <td id="TLVoutput"></td>
    </tr>
<button onclick="TLV()">Calculate</button>
    </table>
</form>

4 个答案:

答案 0 :(得分:3)

以下是三种常见方式:

var myNumber = +myString;            // coerce string to number
var myFloat = parseFloat(myString);  // parse as floating point number
var myInt = parseInt(myString, 10);  // parse as a base-10 integer

文档:

+运营商 - mdn msdn
parseFloat()方法 - mdn msdn
parseInt()方法 - mdn msdn

这些技巧中的每一种都有自己的怪癖。由于JavaScript的动态特性,类型转换并不简单。

parseInt()

parseInt()通过从左到右读取数字生成整数或NaN。如果您的字符串仅包含数字,您使用的是支持ECMAScript 5的浏览器(IE8及更旧版本没有),这非常简单 - 您将这些数字作为基数为10的数字。 IE8或更早版本,如果第一个数字是0,您将获得八进制数字。例如,parseInt("010")在现代浏览器中返回10,在旧浏览器中返回8。要纠正此问题,请始终在第二个参数中指定 radix 。无论浏览器版本如何,parseInt("010", 10)始终返回10

解析停在第一个非数字字符处。因此,parseInt("4 donuts")4一样返回parseInt("4,000")。如果字符串中的第一个字符不是数字或+-,您将获得NaN,因此无法解析"$5"

如果字符串以0x开头,则将其视为十六进制(基数为16)。 parseInt("0x10")返回16。如果您使用基数明确指定基数16,则同样如此:parseInt("10", 16)

parseFloat()

parseFloat()parseInt()类似。区别在于parseFloat()仅适用于基数10,显然,它会产生一个浮点数。

加法运算符(+

在JavaScript中,字符串可以用作数字。当JavaScript构造接受一个数字并获得其他东西(例如字符串)时,它通常会尝试将其“强制”为一个数字。我们看到此行为的一种情况是+运算符。在某些方面,强制比解析更严格 - 整个字符串必须是数字,而不仅仅是开头,否则返回NaN。但是,换句话说,它不那么严格 - 空格或空白字符串在强制转换为数字时返回0,但在解析时返回NaN

除了加法运算符之外,将字符串强制转换为数字的其他方法包括:

  • Number()构造函数用作函数
  • 将字符串传递给接受数字的方法,例如Math.floor("10")
  • 使用带算术运算符的字符串:
var string = "10";
var num = string * 1;
var num = string / 1;

获取有关如何将字符串强制转换为ECMAScript Spec, Section 9.3.1中的数字的完整详细信息。

答案 1 :(得分:1)

使用parseInt('value', 10 )将字符串转换为数字

要读取该值,请使用此语法..在何时根据id选择元素,然后使用value属性获取值。

请记住,这是JavaScript而不是Java

var TLVday = document.getElementById.('getTLVdate').value

将您的代码更改为

var button = document.getElementById('calculate');

button.addEventListener('click', TLV);

function TLV() {
    var TLVday = parseInt(document.getElementById('getTLVdate').value, 10),
        OBday = parseInt(document.getElementById('getOBdate').value, 10),
        DD = 0;
    if (TLVday < OBday) {
        DD = OBday + 10;
    } else {
        DD = OBday + 30;
    }
    document.getElementById("TLVoutput").innerHTML = DD;
}

还要避免内联绑定事件。总是更好地分离您的顾虑。

<强> Check Fiddle

答案 2 :(得分:1)

没有'Integer'这样的东西,那就是Java而不是JavaScript。

要将字符串解析为整数,您可以使用parseInt,但如果您不关心它是整数还是浮点,则无需执行任何操作 - 当您尝试使用它时它会自动转换。 / p>

但是,您无法仅使用其ID来访问字段值。相反,你必须使用DOM - 'document.getElementById(“getTVLdate”)。value'

答案 3 :(得分:0)

如果你有一个字符串,你需要转换为一个数字,如果你需要一个浮点,你可以使用parseIntparseFloat

parseInt('84945');

您可以提供另一个参数parseInt('84945',10);指定基数,本例中为bas 10