質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

4回答

3711閲覧

特定の数値の0パディングに失敗する

shanxia

総合スコア1038

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2016/07/29 03:23

月を0パディングして、常に2桁で扱いたいと考えて、次の様に書いたのですが、何故か08と09だけ失敗しました。

ruby

1#!/usr/local/bin/ruby 2 3p "%02d" % '01'.to_s 4p "%02d" % '02'.to_s 5p "%02d" % '03'.to_s 6p "%02d" % '04'.to_s 7p "%02d" % '05'.to_s 8p "%02d" % '06'.to_s 9p "%02d" % '07'.to_s 10p "%02d" % '08'.to_s 11p "%02d" % '09'.to_s 12p "%02d" % '10'.to_s 13p "%02d" % '11'.to_s 14p "%02d" % '12'.to_s

(このコードは意味のない変換を行っていますが、調査途中でこの現象に気づいたので質問しています。)

実行結果

ruby

1"01" 2"02" 3"03" 4"04" 5"05" 6"06" 7"07" 8./w:10:in `%': invalid value for Integer(): "08" (ArgumentError) 9 from ./w:10:in `<main>'

何故このような結果になるのでしょうか?

2つの環境で試したのですが、どちらも同じ結果でした。

OS X El Capitan ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]

Centos 6 ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]

他に必要な情報があれば、指摘してください。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

文字列を"%d"に与えると、Integer関数が呼ばれて整数化されるようですね。
自分で文字列をto_iで整数化すると(デフォルトでは)10進数とみなされて変換されるので、希望通りになります。

投稿2016/07/29 13:32

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shanxia

2016/07/30 00:33

ありがとうございます。to_iを使うやり方でうまくいきました。 良いやり方を教えていただき、ありがとうございます。
guest

0

8 進数と認識されているからです。試しに 010 としてみてください。8 と表示されると思います。

投稿2016/07/29 03:33

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

頭に0が付くのは8進数で扱われているから、
08 と 09 は8進数として正しくないのでエラーになるのでは?

投稿2016/07/29 03:30

moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

0始まりだと八進数だと認識されるので、8や9は八進数に出てこない文字だとしてはじかれます。

投稿2016/07/29 03:29

yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shanxia

2016/07/29 03:30

そうだったのですか! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問