• ベストアンサー

Rubyでの数字の扱いについて

Integerの024と23について比較演算を行うと 024 > 23 の扱いがfalseになってしまいます。 これはなぜでしょうか。

  • Ruby
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6286)
回答No.1

先頭にゼロが来ると、その数を8進数とみなします。 従って、024は10進数で20となりますので、23より小さいです。

takata2223
質問者

お礼

「0o数字」の場合は8進数とみなすことは知っていたのですが、0だけでもそうなってしまうのですね! ありがとうございました!

関連するQ&A

  • 演算子 Ruby認定試験対策問題

    Ruby認定試験対策問題をやっていたら分からないところがあったので、 教えてください。 2.4.演算子 ■問題 次の各行を独立して実行した場合、エラーとなる行があった。エラーとなった行について正しく述べているのはどれか。 A: 1 << 1 B: 1 << 1.0 C: 1.0 << 1 D: 1.0 << 1.0 ■回答 正解は(1)「C行, D行がエラーとなった。」 ■解説 Float には、<< 演算子が定義されていません。また、Integer型に、<< 演算子の引数として、浮動小数点を渡しても、引数は自動的にInteger型に変換され、正しく処理されます。 とあるのですが、問題の意味、なぜ回答が(1)になるか、また、解説の「Integer型に、<< 演算子の引数として、浮動小数点を渡しても」がどの部分を指すのかが分かりません。 自分が調べた限りでは、 << はIntegerクラスのメソッド(シフト演算子)で、ビットを左にシフトするものということだけなのですが……。 この場合、問題の主旨は、例えば「Aだと、1 を 1 ビット左にシフトする」、「Bだと、1 を 1.0 ビット左にシフトする」、「Cだと、1.0 を 1 ビット左にシフトする」という意味なのでしょうか。 また、演算子の引数というのは、<<より右側を指すのでしょうか?

    • ベストアンサー
    • Ruby
  • Ruby on Railsのエラー等について

    以前Javaを触っていたものですが、新しい業務で携わることになったRuby on Railsについて質問があります。 1.errorsについて ActiveRecordを継承したModelにerrorsというメソッド(プロパティ?)がありますが、この正体は何という名前のクラスでしょうか。 また、このerrorsにはaddおよびadd_to_baseというメソッドでエラーメッセージを加えることができますが、加えたエラーは蓄積されていくのでしょうか、もしくは上書きされていくのでしょうか? 例えば、 model.errors.add_to_base('エラーが発生しました') model.errors.add_to_base('エラーがでたよ') と続けて書いた場合、error_message_forで表示されるエラーは後者('エラーがでたよ')だけという動きが正しいのでしょうか?もしくは、両方とも表示されるのが正しいでしょうか? 2.論理演算子「&&」「||」について Javaの「&&」や「||」という演算子は、前の判定だけで結果が出たなら後の判定をパスして先へ進みます(例えば「A && B」でAがfalseなら、Bの判定をせずにfalseを返すといった具合)。これに対して「&」や「|」といった、前の判定がどのような結果であれ後の判定も強制的に行うという演算子が用意されています(「A & B」ならAがfalseでもBの判定も必ずするといった具合)。 Rubyにはこれに相当する演算子はないのでしょうか?「and」や「or」がありますが、どうも違うようなので。 もし詳しい方がいらっしゃれば、ご教授下さい。 よろしくお願いします。

    • ベストアンサー
    • Ruby
  • rubyでは比較演算子もメソッドとして書き換えが可

    rubyでは<や>などの比較演算子もメソッドと分類されるのでオーバーライドが可能と認識しております。具体的にどのようにコーディングしたら良いのでしょうか? 例えば、配列に数値が格納されているとします。 array=[3,5,4,2,1] この配列をソートした場合に比較が何回行われたかをカウントしたいです。 p array.sort >や<が再定義可能なら、比較演算子が呼ばれる度にカウンターアップするなどと言う事はできるような気がするのですが、どうコーディングしてよいか解りません。 rubyのマニュアルも読んだし、それなりに検索でも頑張ったのですが、煮詰まってしまいました。 ご指導のほど、よろしくお願いいたします。

    • ベストアンサー
    • Ruby
  • 数字の全角文字を調べる

    visual basic 2008に関する質問です。 テキストボックスに入力した文字列の中に、数字の全角文字が 含まれているかどうかをチェックするメソッドはありますか? 下記の内容でビルドすると、エラーとなります。 (ソースより抜粋)--------------------------------------- Dim str As String = TextBox1.Text Dim chr As Char = str.Chars(0) If ((chr >= &H8250) And (chr <= &H8258)) Then Label1.Text = "数字は半角文字で入力して下さい。" End If ------------------------------------------------------- (エラー内容)------------------------------------------- 演算子'>='は、型'Char'および'Integer'に対して定義されて いません。 演算子'<='は、型'Char'および'Integer'に対して定義されて いません。 ------------------------------------------------------- 使用OSは、Windows Vistaです。 質問とあわせて、上記のエラーの対処方法について教えて頂けると 助かります。

  • VBA 2つの文字列の差を見る方法

    マクロ作成中、If文でlike演算子を使ってます。ワイルドカードを使い、どう見てもTrueと思える文字列がFalse扱いされており、確認したいのです。 他方法でも構いません。

  • Rubyのクラス

    class Test def initialize @ary = Array.new(size){false} end def print _print end def _print print"#{@ary}" end end test = Test.new(5) test.print 上記のプログラムはエラーが出て実行できません。期待している動作は[false,false,false,false,false]です。どうしてエラーが出るか教えていただきたいです。また、解決策もよろしくお願いします。

    • ベストアンサー
    • Ruby
  • VB 電卓 数字キーを押して ラベルに出力

    VB.NET 2005では、 VB.NETにはコントロール配列は存在しないらしいので、それに類似した処理をどう行うかを教えていただきたいのです。 電卓の数字0~9までのボタンをクリックした時 どうすればよいのでしょうか? 作成中のコードです。 Option Explicit On Public Class frmMain Dim dData1 As Double, dData2 As Double '数値記憶用 Dim SuuFlag As Boolean '数字キー用 Dim EFlag As Boolean '演算キー用 Dim Enzan As Integer '演算種類記憶用(+:0,-:1,*:2,/:3,4:=) Const NONE = -1 Const TASU = 0 Const HIKU = 1 Const KAKERU = 2 Const WARU = 3 Const EQU = 4 Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load dData1 = 0 '数値記憶用変数の初期化 dData2 = 0 Enzan = NONE '演算種類初期値 SuuFlag = False EFlag = False End Sub Private Sub cmd_Click(ByVal Index As Integer) '0が1文字だけ、または、演算キーを押した後の時 If txtDisplay.Text = "0" Or SuuFlag = False Then txtDisplay.Text = "" '0を消す dData2 = 0 End If If Index <= 9 Then '0 - 9 数字 txtDisplay.Text = txtDisplay.Text & Trim(Str(Index)) ElseIf Index = 10 Then '.小数点 If txtDisplay.Text = "" Then '最初が小数点 txtDisplay.Text = "0." ElseIf InStr(txtDisplay.Text, ".") = 0 Then '小数点無し txtDisplay.Text = txtDisplay.Text & "." End If End If SuuFlag = True End Sub End Class 数字のオブジェクト名は 1=cmd1 2=cmd2 3=cmd3 0=cmd0 ~といった感じです。 この先、数字を表示させるには いったいどうすればよいのでしょうか。 大変申し訳ないのですが、回答お願いいたします。

  • この実験の有効数字の扱い

    この実験の有効数字の扱い とある実験をして次のようなデータを得ました。 長さ(mm) 長さの2乗(mm^2) 181.5   32943.3   104.9   11004.0 85.0    7225.0 70.0    4900.0 57.7    3329.3 46.3    2143.7 37.4    1398.8 35.2    1239.0 30.2    912.0 25.1    630.0 ここで、長さの2乗をしたものは有効数字の考えに沿って、 7225.0なら723ですよね。 912.0なら912ですよね。 そうなると急に数が増えておかしくなっちゃうのですが・・・ どう対処すればよいのでしょうか。

  • CPUベンチマークの見方

    Bencherというソフトを使用してますが Integer(整数演算) Float(浮動演算) Pen-4 Integer-283 Float-354 Ath-XP Integer-768 Float-686 この場合数値が小さいのと大きいのでは、どっちが処理能力が上ですか? 宜しくお願いします。

  • RUBYのプログラムわかりません。

    昨日からRUBYを始めた初心者です。 BOX-COX変換を見て、コードを 動かそうとしましたが、NEW演算子?でエラーが 出たりして動きません。WINDOWS版ですがどのように すれば動くのでしょう。NEW演算子はクラス以外の 生成でどう使うのでしょう?下記NEW演算子の ところを抜き出しました。 どうぞよろしくお願い致します。 ar=[5.5,4.0,6.0,5.0,5.0,4.0,4.3] def Box_Cox1(ar, add)   ary=[1.2,2.0]   transformed_dn = ary.new() return ar.size end add = "0.01" begin p Box_Cox1(ar, add) end