Ruby中带前导零数字转整数异常,求原因及解决建议
问题原因与解决方案
这其实是Ruby 1.9.x版本的一个标准行为——带前导零的数字字面量会被解析为八进制数,而不是你预期的十进制数,这就是转换结果不符合预期的核心原因。
咱们对应你的例子拆解一下:
00232作为八进制数,转换为十进制的计算过程是:2*(8²) + 3*(8¹) + 2*(8⁰) = 2*64 + 3*8 + 2 = 128 + 24 + 2 = 154,和你得到的结果完全匹配。0023同理:2*8 + 3 = 16 + 3 = 19,也对应你看到的输出。- 不带前导零的
23会被直接解析为十进制数,所以to_i后还是23。
解决办法
如果需要处理带前导零的数字并得到十进制结果,可以按以下方式操作:
- 如果是字符串形式的带前导零数字:调用
to_i时指定基数为10,强制按十进制解析:"00232".to_i(10) # => 232 "0023".to_i(10) # => 23 - 如果是代码中写的数字字面量:避免手动加前导零;如果是从其他地方获取的带前导零数值(比如用户输入),先将其转为字符串,再用上述方法指定十进制解析。
内容的提问来源于stack exchange,提问作者Dyaniyal Wilson
相关产品推荐
相关产品推荐

