Javascript Nan 错误:将字符串解析为整数

Posted

技术标签:

【中文标题】Javascript Nan 错误:将字符串解析为整数【英文标题】:Javascript Nan Error: parsing strings to ints 【发布时间】:2013-04-23 18:52:12 【问题描述】:

参考文献

How to convert string into float in javascript? jQuery calculation NaN

目标

从用户那里获取两个数字输入值。 将第二个数字除以第一个数字。 将结果乘以 100,以百分比表示。 将每个数字和结果添加到单独的列表中。 通过 onClick 命令调用函数 getTextInput()。

背景

我主要使用 Java;我目前正在学习数据结构课程(二年级 CS 学生)。我的熟练度是中级。我对javascript的熟悉是基本的。

问题

NaN 结果。我尝试了多种方法来完成这项任务;我解析了两个输入值并将它们分配给新变量,并将两个初始字符串输入解析为浮点值。但是,我在将这两个 int 或 string 类型的结果解析为浮点值时仍然遇到问题。我应该解析为 int 类型参数的浮点值吗?当我将字符串值转换为 int 值时,程序将不接受输入值并崩溃。为什么会这样?我查看了几个相关的帖子,但找不到任何提供我正在寻找的信息的东西。解决此问题的最佳方法是什么?非常感谢任何帮助或指导。谢谢。

注意整个代码贴在最底部。

方法 1 - 将两个字符串解析为浮点数。当我将 percentOfNumbers 和 percentList 打印到控制台时,结果为“NaN”。

var num1 = document.getElementById("numString1"); var num2 = document.getElementById("numString2");

percentOfNumbers = parseFloat(num2/num1 * 100); percentList.push(percentOfNumbers); percentOfNumbers.value = "";

// 将 num1 添加到 List1 List1.push(num1.value); num1.value = "";

// 将 num2 添加到 List2 List2.push(num2.value); num2.value="";

方法 2 - 将每个文本输入解析为一个 int 值,将结果解析为一个浮点值。当我将 percentOfNumbers 和 percentList 打印到控制台时,结果为“NaN”。

var num1 = document.getElementById("numString1"); var num2 = document.getElementById("numString2");

var num1Parsed = parseInt(num1); var num2Parsed = parseInt(num2);

percentOfNumbers = parseFloat(num2Parsed/num1Parsed * 100); percentList.push(percentOfNumbers); percentOfNumbers.value = "";

// 将 num1 添加到 List1 List1.push(num1Parsed.value); num1Parsed.value = "";

// 将 num2 添加到 List2 List2.push(num2Parsed.value); num2Parsed.value="";

// 输入值示例,num1 为 2000,num2 为 2233

// 完整代码

<!--
To change this template, choose Tools | Templates
and open the template in the editor.
--><!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <script>

            // separate lists for repeat user input values for num1, num2, and percentageOfNumbers
            var List1 = [];
            var List2 = [];
            var percentageList = [];
            var percentOfNumbers = 0;
            var num1Parsed = 0;
            var num2Parsed = 0;

           function getTextInput() 

                // retrieve two numbers of type 'String' from user and assign to appropriate var
                var num1 = document.getElementById("numString1");
                var num2 = document.getElementById("numString2");

                // parse each string input number into an int
                num1Parsed = parseInt(num1);
                num2Parsed = parseInt(num2);

                // divide second number by first number
                // parse result and assign to percentOfNumbers var
                // add percentOfNumbers value to percentageList
                // reassign percentOfNumbers to ""
                percentOfNumbers = (num2Parsed/num1Parsed * 100);
                percentageList.push(percentOfNumbers);
                percentOfNumbers.value = "";

                // add num1 to List1
                List1.push(num1Parsed.value);
                num1Parsed.value = "";

                // add num2 to List2
                List2.push(num2Parsed.value); 
                num2Parsed.value= "";



           

    </script>

    </head>
    <body>
        <input id="numString1" type="text" name="input1" value="" /> 
        <input id="numString2" type="text" name="input2" value="" /> 
        <input id="inputField" type="button" name="search" value="compute" onClick="getTextInput();" /> 
    </body>
</html>

【问题讨论】:

【参考方案1】:

num1num2 变量不包含字符串,它们包含 DOM 元素。

使用value 属性从输入字段中获取值:

var num1 = document.getElementById("numString1").value;
var num2 = document.getElementById("numString2").value;

Numbers 但是没有value 属性。您想自己推送数字:

List1.push(num1Parsed);
List2.push(num2Parsed);

附注:使用parseInt 时指定基数,因为带有前导零的数字将使用基数 8 而不是 10 进行解析:

num1Parsed = parseInt(num1, 10);
num2Parsed = parseInt(num2, 10);

【讨论】:

关于 parseInt 和前导零,在 ES5 中,“函数 parseInt 的规范不再允许实现将以 0 字符开头的字符串视为八进制值”。但是,实施仍然如此。去图吧。 感谢您如此迅速地回复。不过,这是有道理的。我最近才开始学习 javascript,感谢您的耐心和帮助。代码正在运行。

以上是关于Javascript Nan 错误:将字符串解析为整数的主要内容,如果未能解决你的问题,请参考以下文章

[JavaScript] parseInt() 函数

JavaScript的parseint()函数

JAVASCRIPT 转换字符串杂记

JavaScript中将字符串类型转换为整形的函数

为啥当我尝试将字符串重复指定次数时,Javascript console.log 结果为 NaN

IE JavaScript字符串转换成Date后出现NaN错误