0

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

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

    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

4 回答 4

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通过从左到右读取数字来生成整数或 a . 如果您的字符串仅包含数字,并且您使用的浏览器支持 ECMAScript 5(IE8 和更早版本不支持),这非常简单 - 您将这些数字作为以 10 为底的数字。在 IE8 或更早版本中,如果第一个digit 是0,你会得到八进制的数字。例如,在现代浏览器和旧浏览器中parseInt("010")返回。要纠正此问题,请始终在第二个参数中 指定基数。无论浏览器版本如何,总是返回。108parseInt("010", 10)10

解析在第一个非数字字符处停止。所以,按原样parseInt("4 donuts")返回。如果字符串中的第一个字符不是数字 or ,则会得到,因此无法解析。4parseInt("4,000")+-NaN"$5"

如果字符串以0x它开头,则将其视为十六进制(以 16 为基数)。 parseInt("0x10")返回16。如果您使用 radix: 明确指定 base 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 规范第 9.3.1 节中获取有关如何将字符串强制转换为数字的完整详细信息。

于 2013-07-19T21:57:11.717 回答
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;
}

还要避免内联绑定事件。将您的担忧分开总是一个更好的主意。

检查小提琴

于 2013-07-19T21:56:29.043 回答
1

没有“整数”之类的东西,那是 Java 而不是 JavaScript。

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

但是,您不能仅通过使用其 id 来访问字段值。相反,您必须使用 DOM - 'document.getElementById("getTVLdate").value'

于 2013-07-19T22:03:21.917 回答
0

如果您需要将字符串转换为可以使用的数字parseIntparseFloat如果您需要浮点数。

parseInt('84945');

你可以给另一个参数parseInt('84945',10);指定基数,在这种情况下为 10

于 2013-07-19T21:57:21.300 回答