1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Ruby】0埋めに失敗するケースについて

Posted at

はじめに

Rubyの0埋め処理においてエラーが発生したので、原因と対応策を備忘として残しておきます。

エラーになる場合がある0埋め処理

# 月を0埋めして2桁にしようとした
# monthには「09」と言う文字列が設定されていた
val = sprintf('%d/%02d/01', year, month)

結果

invalid value for Integer(): "09" (ArgumentError)

【原因】
Rubyに限ったことではないが、整数リテラルの前に0があると8進数と認識されることがある。
(「されることがある」としているのは使用する関数や前後の処理で変わってくるため。)
今回の場合、「09」を8進数と認識され、8進数で9は存在しないよ!といった感じでエラーになった。

【対応策】
"%02d"の部分に文字列を渡さず、整数化してから渡す。

val = sprintf('%d/%02d/01', year, month.to_i)

おわりに

8進数では8も使用できない。
扱える数値は各々調べてみて下さい。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?