使用parseFloat()表示十进制

时间:2015-10-05 21:52:03

标签: javascript parsefloat

我试图使用按钮制作一个简单的计算器,但是我在设置小数点时遇到了麻烦。我试图将数字提升到那一点,添加一个十进制字符(从而使它成为一个字符串),并使用parseFloat再次使它成为一个数字。这是我的代码:

function decimalButton() {
  inputValue = inputValue + ".";
  inputValue = Number.parseFloat(inputValue);
  show(inputValue);
}

inputValue原来是intshow()只显示我放入的任何值。

但是,当我运行此代码时,显示中没有添加小数,并将其视为一个大整数(例如,显示44.6并将其视为446。

但如果我编写parseFloat行代码,我会得到正确的显示,但它是一个字符串,我无法用它做任何事情。任何帮助将不胜感激。

2 个答案:

答案 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中,您为数字提供多种数据类型 - 没有intsfloats等,而是有number,用于表示可在代码中与之交互的所有数字的数据类型。 parseIntparseFloat之间的区别在于parseInt删除了小数值而parseFloat没有,但它们仍然返回number

如果我按原样制作计算器,我会等到用户输入完整的数字后再使用parseIntparseFloat。假设用户正在输入某种文本输入或DOM容器,在DOM中它将是string ,因此无需将其转换为{{1 }}。一旦你开始处理计算,将number解释为44.并不重要,因为事实上它就是这样。

您可能正在接收44而不是446,因为小数未插入(小数44.6,在删除小数后没有任何内容,这意味着用户实际上正在键入{{1 }})。将其保留为字符串,直到用户完成输入,然后转换并解决问题。