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