【问题标题】:Using parseFloat() for decimal使用 parseFloat() 进行十进制
【发布时间】:2015-10-05 21:52:02
【问题描述】:

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

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

其中inputValue 最初是int,而show() 只显示我输入的任何值。

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

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

【问题讨论】:

  • 这里没有足够的信息给你一个答案。我们需要了解 inputValue 的来源以及它是如何构建的。 Jon Skeet 在codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-questioncodeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question 写了一篇非常好的博客文章
  • 所以你有44.6 并在最后附加另一个点?那么44.6. 应该是什么意思?
  • @TravisJ throbber 旋转了约 20 秒,所以我将其复制到缓冲区。然后我刷新了一个页面 - 没有评论,所以我再次粘贴并添加了更多文本。然后我提交一个新的后,前一个出现可能是5-7秒。最终的一致性是最终的。
  • @zerkms 最后没有点。它显示并被视为简单 446 那是句子中的一个句号,我应该输入更好的哈哈
  • 给定一个字符串 "446." 我希望任何语言 X 中的 parseFloat 做以下两件事之一:产生 446.0 或产生 446 ...我会期望它保留多余的十进制字符。正如@Buzinas 所说,在用户提供输入时将内容保留为字符串,然后仅在用户完成后将它们转换为数字。比如说,用户输入446. + 3.9 你可以在他们按下加号键时输入parseFloat("446.") - 然后你就知道你有一个数字后跟一个运算符。或者等到他们按下= 并解析整个方程。

标签: javascript parsefloat


【解决方案1】:

Javascript 有 string 类型和 number 类型,但没有单独的 intfloat 类型.

你可以从一些字符串开始:

> 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

如果您想保留尾随小数 .,您必须将变量保持为 字符串,并且只有在准备好时才将其转换为 数字用它的值进行计算。

【讨论】:

    【解决方案2】:

    这是因为(使用您的示例)44. 被 Javascript 解释为 44.0,这与 44 相同,然后将其转换为。

    在 JS 中,没有数字的多种数据类型 - 没有 intsfloats 等,而是有 number,一种用于表示的数据类型所有可以在代码中交互的数字。 parseIntparseFloat 之间的区别在于 parseInt 会去除十进制值,而 parseFloat 不会,但它们仍然返回 number

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

    您可能收到的是446 而不是44.6,因为没有插入小数点(parseFloat 的小数点在删除小数点后什么都没有,这意味着用户实际上是在输入446)。将其保留为字符串,直到用户完成输入,然后转换,问题将得到解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 2018-03-26
      相关资源
      最近更新 更多