【问题标题】:Javascript casts floating point numbers to integers without causeJavascript无缘无故地将浮点数转换为整数
【发布时间】:2012-08-03 15:38:17
【问题描述】:

我编写了一个函数,该函数的行为取决于其参数的数字类型。整数或浮点数。

使用此问题How do I check that a number is float or integer? 中的一些代码很容易检测是否浮动,但后来我偶然发现了如果您使用该数字调用函数,javascript 将1.0 无故强制转换为1 的情况。

例子:

function dump(a, b) {
 console.log(a, typeof b, b);
}

dump('1', 1);
dump('1.0', 1.0);
dump('1.1', 1.1);

输出 chrome、firefox、ie、opera 和 safari 都给出了相同的结果:

1   number 1
1.0 number 1 "wrong"
1.1 number 1.1

我知道 javascript 只知道 number 类型,但强制转换似乎太过分了。我想出的唯一解决方案是使用'1.0' 之类的字符串值调用函数,检测点并使用parseFloatparseInt

对此有何建议?

【问题讨论】:

  • 为什么你需要1.0 而不是1?它们是相同的值。 JavaScript 没有intfloat 的概念,只有number
  • 你写的函数是什么?为什么它是intfloat 很重要?
  • 函数返回一个随机数,例如在 A 和 B 之间。根据初始值,它可以是 4,10 = > 7 (int) 或 1.5, 12 => 4.25 - 你明白了。
  • 我还是不明白。你只想要数字的平均值(1.5, 12 不会是6.75)?这个“例子”并没有说明为什么它是 intfloat 很重要。
  • 它可以是 1.5 到 12 之间的任何浮点数,也可以是您调用函数时使用的任何范围。

标签: javascript floating-point parsefloat


【解决方案1】:

您已经承认 JavaScript 只有一个 Number 类型。因此,11.0 相同。

如果你需要这个来显示,那么你应该使用toFixed

1..toFixed(1); // "1.0"

【讨论】:

  • 不是为了展示。根据操作的结果,函数使用 parse(Type) 返回一个 float 或 int 值。
  • @naden:我不明白。您已经说过您知道 JavaScript 中没有这种区别。如果你想让 JavaScript 在没有区别时表现得好像有区别,那么除了使用字符串之外,恐怕你不走运。
  • ...JavaScript 将 1.01 视为相同。 JavaScript 将 "1.0""1" 视为不同的。这些是您的基本选择。
  • @naden:是的...令人惊讶...;) 遗憾的是,除了使用字符串或其他方式手动传达此信息之外,没有真正的解决方案。通过1.0 将始终被视为通过1
  • @naden:一种选择是使用自定义数字构造函数,该构造函数接受初始值作为字符串,存储该值,但将其 toNumber 转换为数学运算。 jsfiddle.net/rMWmr 不完美,当然不如使用数字文字好,但也许有帮助?
【解决方案2】:
number%1===0 

如果条件为 true ,则为整数,否则为浮点数

【讨论】:

  • 不幸的是,我指出你错了,因为强制“演员”。您可以运行示例代码来验证它。
  • 我没看错,这只是 js 的工作方式。无论如何,现在您必须修改十分之一,这要好得多。 jsfiddle.net/EKmT3/5
  • 确切地说,你并不总是错的,但考虑到我的情况;)这取决于函数输入。见jsfiddle.net/7mrqM
  • 我没有看到任何与我的帖子不同的地方。您必须处理 .0 个数字中的 10 个
  • 不同的是,参数为1.0“float”,函数alerts“int”。
猜你喜欢
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 2018-04-30
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多