对十进制使用parseFloat()



我正试图用按钮制作一个简单的计算器,但在放置小数点时遇到了麻烦。我正试图将数字提升到这一点,添加一个十进制字符(从而使其成为字符串(,并使用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中,数字没有多种数据类型-没有intsfloats等,而是有number,一种用于表示代码中可以交互的所有数字的数据类型。parseIntparseFloat之间的区别在于,parseInt去掉了十进制值,而parseFloat没有,但它们仍然返回number

如果我像你一样制作计算器,我会等到用户输入了他们的完整数字后再在上面使用parseIntparseFloat。假设用户输入到某种文本输入或DOM容器中,在DOM中无论如何都会是string,所以不需要将其转换为number。一旦你开始处理计算,44.是否被解释为44就无关紧要了,因为事实上就是这样

您可能收到的是446而不是44.6,因为没有插入小数(小数的parseFloat在删除小数后没有任何内容,这意味着用户实际上正在键入446(。将其保留为字符串,直到用户完成键入,然后进行转换,问题就会得到解决。

最新更新