• ベストアンサー

整数の桁数が取得できません

Javaで整数の桁数を取得するには、以下の方法しかないのでしょうか? int num = 123; // の桁数3を取得するには int keta = Integer.toString(num).length;

  • Java
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
  • kutar
  • ベストアンサー率80% (12/15)
回答No.2

No.1の方の回答で取得できます。 ただlogを使うと重くなる(処理が遅くなる)との声もあるようです。(参考URL参照) ちなみにこんな方法でも取得できます。 while(0<num){ num /= 10; keta++; } ただこの方法ですとループが終わった(桁数が取得できた)後、 numの値が0になっていますので、numの値は必ず別の変数に 保持しておいてください。 ちなみに私はいつもmatchoriさんの方法で桁数取得しています。 それでは!

参考URL:
http://www.vc-net.ne.jp/~ytp/bbs/java/bbs6333.html
matchori
質問者

お礼

回答ありがとうございます。 私の方法で大丈夫なようで安心できました(^^)

その他の回答 (1)

  • yurarinco
  • ベストアンサー率34% (20/58)
回答No.1

int keta = (int)(Math.log(num)/Math.log(10)) + 1; でも計算できると思います。

関連するQ&A

  • Javaで先頭の0を含め整数の桁数を取得したい

    Javaで整数の桁数を取得したいのですが、 Scanner ids = new Scanner(System.in); int i = ids.nextInt(); String s = String.valueOf(i); int keta = s.length(); こうした場合に 12345678 と入力すれば8が取得できるのですが、 09876543 と入力したときに7と取得してしまいます。 先頭の0を無視せずに取得するにはどうすればよいでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • 数値⇒漢数字変換 java

    こんにちは。java初心者の学生です。 実行時引数で得た数値を漢数字に変換するコードを書いているのですがif構文の&&のところで実行時エラーが出てしまいます。 原因としては1200001234と入力した時に”args[0].length()-12が存在しない”などがあげられると思いますが、下に載せたコード以外で兆、億、万桁が0の場合の対処方がわかりません。 御享受いただけると助かります。よろしくお願いします! public class Question14 { /** * 実行時引数で得た数字の漢数字変換 * @param args 数字 */ public static void main(String[] args) { StringBuffer num = new StringBuffer(args[0]); if(num.length()>20){ System.out.println("0~99999999999999999999の数値で入力してください。"); } else{ StringBuffer sb = new StringBuffer(); if(num.equals("0")){ System.out.println("零"); } else{ for(int keta = num.length()-1; keta>=0; keta--){ if(keta==args[0].length()-5 && !((num.substring(args[0].length()-8,args[0].length()-4).equals("0000")))){ sb.insert(0,'万'); } else if(keta==args[0].length()-9 && !((num.substring(args[0].length()-12,args[0].length()-8).equals("0000")))){ sb.insert(0,'億'); } else if(keta==args[0].length()-13 && !((num.substring(args[0].length()-16,args[0].length()-12).equals("0000")))){ sb.insert(0,'兆'); } else if(keta==args[0].length()-17){ sb.insert(0,'京'); } switch(num.charAt(keta)){ case'1': sb.insert(0,"一"); break; case'2': sb.insert(0,"二"); break; case'3': sb.insert(0,"三"); break; case'4': sb.insert(0,"四"); break; case'5': sb.insert(0,"五"); break; case'6': sb.insert(0,"六"); break; case'7': sb.insert(0,"七"); break; case'8': sb.insert(0,"八"); break; case'9': sb.insert(0,"九"); break; case'0': continue; default: System.out.println("数値を入力してください"); break; } if(keta==num.length()-2||keta==num.length()-6||keta==num.length()-10||keta==num.length()-14||keta==num.length()-18){ sb.insert(1,"十"); } else if(keta==num.length()-3||keta==num.length()-7||keta==num.length()-11||keta==num.length()-15||keta==num.length()-19){ sb.insert(1,"百"); } else if(keta==num.length()-4||keta==num.length()-8||keta==num.length()-12||keta==num.length()-16||keta==num.length()-20){ sb.insert(1,"千"); } } } System.out.println(sb); } } }

  • javaで数字の有効桁数を取得したい

    javaで数字の有効桁数を取得する関数を作成しようと思っています。 具体的には、 「12」なら2。 「12.4」なら3。 「12.345」なら5。 「0.0023」なら2。 「0.2035」なら4。 「3.00」なら3。 という感じで取得したいのですが、これを実現する方法、もしくはメソッド等ありましたら 教えて下さい。よろしくお願いします。

    • ベストアンサー
    • Java
  • 実数の整数部,小数部の取得

    OS:windows2000pro VB:VB6.0sp5 実数 num(変数) [as currency]  (但し 小数点以下2位まで)の値の 1.整数部 num_int(変数) [as long] 2.小数部 num_dec(変数) [as long] を上記変数に格納するのは、どのようにすればいいのでしょうか? (例1)num = 123.02 の場合、num_int=123, num_dec=2 (例2)num = 4.20 の場合、num_int= 4, num_dec=20 (例3)num = 0.23 の場合、num_int= 0, num_dec=23  よろしくお願いいたします

  • DataGridViewの桁数制限に関して

    VB2008 DataGridViewを用いて開発を行っていますが、そのDataGridViewのある列だけ 入力の桁数制限を掛けたいと考えています。 数字のみしか受け付けない方法等はHP上で検索できたものの、やはり桁数制限 だけは調べられませんでした。。。 あるHPより、以下のような記述も見つけましたが、この場合だと数字が打ちこめて しまいます。 そもそも打ちこめる桁数も制限をかける方法はないでしょうか、、、 教えて下さい。 Private Sub DataGridView1_CellValidating・・・・ If e.FormattedValue.ToString.Length < 5 Then '5文字以上の場合 e.Cancel = True 'キャンセル End If よろしくお願いします。

  • エクセルの整数部の桁数

    エクセルで作業中です。整数部の桁数を3桁に揃えたい場合の方法を教えて下さい。よろしくお願いいたします。

  • 有効桁数について

    たとえば整数の3桁割る4桁の場合の数値についてです。 レポートの表に数値を記入するとき,たとえば0.921,0.866,0.995,1.331と計算結果が続くとき 小数点以下の桁数を同じにしてはダメですか? やはり1.331は1.33と記入しないとダメなのでしょうか?私は小数点以下の桁数をそろえて記入したところその理由を問われたのですが,答えられませんでした.小数点以下の桁数をそをえてもいい時のわけを教えてください.   大変困ってます!!!

  • 整数のサニタイズ(PHP5)

    例えばGETで送信されてきたパラメータが、整数かどうか確かめる方法として、 $num = (int) $num; という感じで、キャストすればそれで事足りますよね? 変な文字列を埋め込もうとしても、全部0になるみたいなので。 わざわざpreg_matchとか使わなくても大丈夫でしょうか?

    • ベストアンサー
    • PHP
  • 文字列を整数に型変換してソート

    コマンドライン入力で文字列を入力してそれを整数型に変換。そして、それをソートするプログラムを作ってるんですが、なぜかうまくいかず、出力される数字がすべて0になります。 どなたかヘルプおねがいします>< class sort32 { public static void main(String[] args) { System.out.println("------------------------"); int i=0; int j=i+1; int vals[]; vals = new int[args.length]; for(i=0;i>args.length ;i++) { vals[i] = Integer.parseInt(args[i]); } java.util.Arrays.sort(vals); for(int k=0; k<vals.length; k++) System.out.println("<"+vals[k]+">"); } }

  • 配列で最大・最小値を求める

    import java.io.*; class Prog10_2 { public static void main(String args[])throws IOException { System.out.println("10個の整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int num[] = new int[10]; for(int i=0; i<num.length; i++){ String str = br.readLine(); int tmp = Integer.parseInt(str); num[i] = tmp; } int max = 0; int min = 0; for(int i=0; i<num.length; i++){ if(max < num[i]){ max = num[i]; } if(min > num[i]){ min = num[i]; } } System.out.println("最大値は"+max+"で、最小値は"+min+"です。"); } }   というコマンドを実行すると、最大値はちゃんと表示されるのですが、 最小値はいつも"0"しか表示されません。どこを修正すればいいのでしょうか? どなたか分かる方いらっしゃいましたら、よろしくお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう