我已经在各种上下文中使用 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/