javascript - parseInt() 和 parseFloat() : Can this second assertion ever fail?

标签 javascript parseint proof parsefloat

我已经在各种上下文中使用 parseInt()parseFloat() 一段时间了,我想我知道所有的ins和两者之出。但最近我有一个奇怪的想法,到目前为止我还无法明确地证明这一点。

考虑以下函数:

function testProof(strInteger) {
    assert(strInteger === '' + parseInt(strInteger, 10));

    assert(parseInt(strInteger, 10) === parseFloat(strInteger));
}

// Sample calls...
testProof("5");
testProof("109");
testProof("-55");

首先,我们断言将输入转换为整数,然后转换回字符串,再次生成原始字符串。这可以防止 parseInt("100bucks") 返回 100 的情况,并且还确保没有小数部分因转换而被 chop - 我们希望确保输入实际上是一个整数、整数字符串。

如果成功,我们就会断言 parseInt(..., 10) 返回与 parseFloat(...) 相同的值>.

第一个断言失败的原因有很多:

  • 输入的不是整数 ("1.5")
  • 输入有前导零 ("0050")
  • 输入有尾随垃圾(“100bucks”)
  • 输入采用指数表示法 ("1e3"),或者输入太大而变成指数
  • 输入不可解析,导致 NaN
  • 也许还有其他人?

但问题是:只要第一个 assert 通过,第二个 assert 会失败吗?换句话说,如果我们提前知道输入是字符串中的整数,则可以用 parseFloat(...) 函数作为 parseInt(...) 的直接替代品, 10) ? (并不是说这是一个好的替代品......:-P)

最佳答案

它实际上只能通过以下输入失败:

testProof("NaN");

但是如果你真的知道它是一个整数,为什么还要测试呢?另外,parseFloat 不能很好地替代 parseInt,因为在很多情况下您不知道它是否真的是整数而不是 float 。

关于javascript - parseInt() 和 parseFloat() : Can this second assertion ever fail?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24962080/

相关文章:

c# - C#代码契约(Contract): What can be statically proven and what can't?

javascript - 从 JSON 访问记录并添加或删除信息

javascript - Telerik RadMap 更改动态生成的内联样式

java - Integer.parseInt() 错误

javascript - 为什么 parseInt 无法在 Javascript 中正确测试数组?

proof - 如何证明类型在 Agda 中有效?

javascript - 通过 javascript 和 css 的 HTML5 输入验证不起作用

javascript - 如何格式化客户端文本框输入

java - 在 Java 中,如何检查输入是否为数字?

proof - 证明 map ID = IDRIS中的ID?