[#41630] [ANN] langhelp-0.9.0 — rubikitch@...
るびきちです。
7 messages
2005/12/01
[#41654] Hashを継承したクラスの利用方法について — saitani <cxj15527@...>
お世話になります。
9 messages
2005/12/04
[#41720] Tempfile#== — とみたまさひろ <tommy@...>
とみたです。
5 messages
2005/12/21
[#41728] ruby 1.8.4 released — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
9 messages
2005/12/24
[ruby-list:41711] Re: 文字列に格納された頭が 0 で始まる 10 進数の数値への変換
From:
rubikitch <rubikitch@...>
Date:
2005-12-14 09:25:46 UTC
List:
ruby-list #41711
From: Miki Toru <miki_1702@yahoo.co.jp>
Subject: [ruby-list:41710] 文字列に格納された頭が 0 で始まる 10 進数の数値への変換
Date: Wed, 14 Dec 2005 18:18:17 +0900
るびきちです。
> この場合,数値に変換しようと
> 関数 Integer やメソッド to_i
> を使った場合,挙動が異なります。
お、ほんとだ。
irb(main):240:0> "011".to_i
=> 11
irb(main):241:0> Integer("011")
=> 9
> 本来なら 0 で始まる数値は8進数と認識されて然りだと思うの
時と場合によると思いますが…。
たとえば、ファイル名に連番が使われていて、
a-001.txt .. a-099.txt
なんてのがあった場合、8進数と認識されたら困ります。
> また,一般的に 0 が頭についた10進数の文字列を
> 整数型に変換するには ruby ではどうするのが定石でしょうか
> ?
String#to_iでしょうか。
String#to_i
--- to_i
--- to_i(base) ruby 1.7 feature
文字列を 10 進数表現と解釈して、整数に変換します。
p " 10".to_i # => 10
p "010".to_i # => 10
p "-010".to_i # => -10
整数とみなせない文字があればそこまでを変換対象とします。変換対象が
空文字列であれば 0 を返します。
p "0x11".to_i # => 0
hex, oct, to_f,
Integer, Float
も参照してください。
逆に、数値を文字列に変換するには
sprintf,
%,
Integer#to_s [Integer/to_s]
を使用します。
ruby 1.7 feature:
基数を指定することでデフォルトの 10 進以外に 2 〜 36 進数への変換
を行うことができます。また、0 を指定すると prefix により基数を判断
します(逆に prefix を認識するのは 0 を指定したときだけです)。
0, 2 〜 36 以外の引数を指定した場合、例外 ArgumentError が発
生します。
p "0b10".to_i(0) # => 2
p "0o10".to_i(0) # => 8
p "010".to_i(0) # => 8
p "0d10".to_i(0) # => 10
p "0x10".to_i(0) # => 16
Kernel#Integer
--- Integer(arg)
引数を整数(Fixnum,Bignum)に変換した結果を返します。
数値、文字列以外のオブジェクトに対しては to_i メソッドを
使用します(ruby 1.7 feature: 1.7 では、to_int)。
変換した結果が整数(Integerのサブクラス)でなければ
例外 TypeError が発生します。
引数が文字列であった場合には、0x, 0b, 0 などの接頭辞に応じて
それぞれ 16 進、2 進、8 進数として変換します。
整数と見なせない文字列を引数に指定した場合、例外 ArgumentError
が発生します。
p Integer(10.1) # => 10
p Integer(10.8) # => 10
p Integer("10") # => 10
p Integer("10_0_0") # => 1000
p Integer("10__0") # => 100
# => invalid value for Integer: "10__0" (ArgumentError) (ruby 1.7 feature)
p Integer("_10") # => invalid value for Integer: "_10" (ArgumentError)
p Integer("10_") # => invalid value for Integer: "10_" (ArgumentError)
p Integer("0d10") # => invalid value for Integer: "0d10" (ArgumentError)
# => 10 (ruby 1.7 feature)
p Integer("010") # => 8
p Integer("0o10") # => invalid value for Integer: "0o10" (ArgumentError) (ruby 1.7 feature)
# => 8
p Integer("0x10") # => 16
p Integer("0b10") # => 2
p Integer(" \n10\t ") # => 10
p Integer("") # => `Integer': invalid value for Integer: "" (ArgumentError)
p Integer(nil) # => 0
p Integer(Object.new) # => cannot convert Object into Integer (TypeError)
String#hex [String/hex],
String#oct [String/oct],
String#to_i [String/to_i] も参照してください。
るびきち☆
http://www.rubyist.net/~rubikitch/