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

Javascript Nan Error: parsing strings to ints

本文关键字:int 字符串 Nan 错误 Javascript      更新时间:2023-09-26

引用

如何在javascript中将字符串转换为float?jQuery计算NaN

目标

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

背景

我主要使用Java;我目前在一个数据结构班(CS二年级学生(。我的熟练程度是中等的。我对javascript非常熟悉。

问题

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

  • 注:整个代码张贴在最底部。

    方法1-已将两个字符串解析为浮动。'当我将percentOfNumbers和percentageList打印到控制台时,NaN'结果。

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

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

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

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

    方法2-将每个文本输入解析为int值,将结果解析为float值。'当我将percentOfNumbers和percentageList打印到控制台时,NaN'结果。

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

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

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

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

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

//示例输入值,2000用于num1,2233用于num2

//完整代码

<!--
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>

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);