我正试图用按钮制作一个简单的计算器,但在放置小数点时遇到了麻烦。我正试图将数字提升到这一点,添加一个十进制字符(从而使其成为字符串(,并使用parseFloat
使其再次成为数字。这是我的代码:
function decimalButton() {
inputValue = inputValue + ".";
inputValue = Number.parseFloat(inputValue);
show(inputValue);
}
其中inputValue
最初是int
,而show()
只是显示我放入其中的任何值
然而,当我运行此代码时,显示中没有添加小数,它将其视为一个大整数(例如,44.6显示为446。
但如果我对parseFloat
行进行编码,我会得到正确的显示,但它是一个字符串,我对此无能为力。如果有任何帮助,我们将不胜感激。
Javascript有一个类型字符串和一个类型数字,但没有单独的int类型和float。
你可以从一些字符串开始:
> var intStr = "446";
> var floatStr = "446.0";
> var decStr = "446.";
> var floatVal = "446.7";
所有这些都具有字符串类型
> typeof floatStr
"string"
一旦您使用Number
对象解析它们,结果的类型为数字
> var n = Number.parseInt(intStr);
> n
446
> typeof n
"number"
> var f = Number.parseFloat(floatVal);
> f
446.7
> typeof f
"number"
因此parseInt和parseFloat都会产生一个数字。
解析0
分数值为零的字符串会减少小数部分,因为446.0 == 446
> Number.parseFloat(floatStr);
446
之后,解析一个尾部小数没有值的字符串与.0
值相同。446.0 == 446. == 446
> Number.parseFloat(decStr);
446
如果要保留后面的十进制.
,则必须将变量保持为字符串,并且只有在准备好使用其值执行计算时才能将其转换为number。
这是因为(使用您的示例(44.
被Javascript解释为44.0
,与44
相同,后者随后将其转换为。
在JS中,数字没有多种数据类型-没有ints
、floats
等,而是有number
,一种用于表示代码中可以交互的所有数字的数据类型。parseInt
和parseFloat
之间的区别在于,parseInt
去掉了十进制值,而parseFloat
没有,但它们仍然返回number
。
如果我像你一样制作计算器,我会等到用户输入了他们的完整数字后再在上面使用parseInt
或parseFloat
。假设用户输入到某种文本输入或DOM容器中,在DOM中无论如何都会是string
,所以不需要将其转换为number
。一旦你开始处理计算,44.
是否被解释为44
就无关紧要了,因为事实上就是这样
您可能收到的是446
而不是44.6
,因为没有插入小数(小数的parseFloat
在删除小数后没有任何内容,这意味着用户实际上正在键入446
(。将其保留为字符串,直到用户完成键入,然后进行转换,问题就会得到解决。