Ruby:已经格式化字符串的前导零

Mic*_*art 0 ruby

我不明白为什么会这样:

s = "000301"
"%06d" % s             ====> "000193"
sprintf("%06d", s)     ====> "000193"
Run Code Online (Sandbox Code Playgroud)

KAR*_*ván 5

因为它被解释为八进制数.

在irb中尝试:

> 0301
=> 193
Run Code Online (Sandbox Code Playgroud)

但是当你写:

> 301
=> 301
Run Code Online (Sandbox Code Playgroud)

如果你想让它工作,尝试将其转换为整数String#to_i:

"%06d" % s.to_i
sprintf("%06d", s.to_i)
Run Code Online (Sandbox Code Playgroud)