【发布时间】:2014-07-25 18:16:27
【问题描述】:
我在各种情况下使用parseInt() 和parseFloat() 已经有一段时间了,我想我知道这两者的来龙去脉。但是最近我有一个奇怪的想法,到目前为止我还无法确定地证明它。
考虑以下函数:
function testProof(strInteger) {
assert(strInteger === '' + parseInt(strInteger, 10));
assert(parseInt(strInteger, 10) === parseFloat(strInteger));
}
// Sample calls...
testProof("5");
testProof("109");
testProof("-55");
首先我们assert 将输入转换为整数,然后再转换回字符串会再次生成原始字符串。这可以防止parseInt("100bucks") 返回100 的情况,并且它还确保没有被转换截断的小数部分——我们要确保输入实际上是一个整数、整数字符串。
如果成功,那么我们 assert 即 parseInt(..., 10) 返回与 parseFloat(...) 相同的值。
第一个 assert 失败的原因有很多:
- 输入的不是整数 (
"1.5") - 输入有前导零 (
"0050") - 输入有尾随垃圾 (
"100bucks") - 输入采用指数表示法 (
"1e3"),或者它太大而变成指数形式 - 输入不可解析,导致
NaN - 也许是其他人?
但问题是:只要第一个assert 通过,第二个assert 会失败吗?换句话说,如果我们提前知道输入是字符串中的整数,那么parseFloat(...) 可以作为parseInt(..., 10) 的替代品吗? (不是说这是一个好的替代品...... :-P)
【问题讨论】:
标签: javascript parseint proof parsefloat