秘密基地、どこに作った?

手入力された値を0.5区切りに変換するプログラム
を作成しています。

0.1~0.4 を入力 → 0.0 を返す
0.5~0.9 を入力 → 0.5 を返す という感じです。

public static void main(String argv[]){
 Double D = new Double(argv[0]);
 double d = D.doubleValue() * 2;
 int i = (int)d;
 double i_d = i;
 double d_value = i_d / 2;
 Double D_value = new Double(d_value);
 String s_str = D_value.toString();
 System.out.println(s_str);
}

で希望する値(String型)は返ってくるのですが・・・
(NumberFormatExceptionは無視します。)
すごい無駄の多いプログラムに思えて仕方ありません。
超初心者プログラムであること重々承知ですが、もっと短くなりませんか?

環境:JDK1.4 です。

A 回答 (2件)

public static void main( String argv[]){


 Double D = new Double( argv[0]);
 double d = floor( D.doubleValue() * 2)/ 2;
 Double D_value = new Double( d);
 String s_str = D_value.toString();
 System.out.println( s_str);
}

java.lang.mathクラスの中には、その値を超えない最大の整数に
等しいdouble値を返すメソッドfloor() がありますので、それを
利用することになるでしょうか。今手元にjavaの環境がないので、
上記のソースで動くかどうかはわかりません。
    • good
    • 0
この回答へのお礼

どうしても floorのところでエラーになります。
たぶん私の理解不足なんですね・・・
ちょっと便利そうなので使いたいと思います。

結局、同じようなプログラムを
必要箇所全てにつけるのが面倒だというところから
派生しているんですが・・・
0.5区切りに切る専用のJavaBeanを作成し、
それを使用することにします。

ありがとうございました。

お礼日時:2003/04/08 12:53

public static void main(String argv[]){


 Double D = new Double(argv[0]);
 D = (double)((int)(D / 0.5)) / 2.0;
 String s_str = D.toString();
 System.out.println(s_str);
}
もしくは
public static void main(String argv[]){
 Double D = new Double(argv[0]);
 D = (D<0.5? 0.0:.05);
 String s_str = D.toString();
 System.out.println(s_str);
}

どっちも検証してませんが、と言うかJAVAは知らないんですがこれでどうです?
    • good
    • 0
この回答へのお礼

ありがとうございました。

Double, double は別物(?)であるため
キャストエラーが一杯でますね。。

参考にしつつ手を加えて書き直してみます。

お礼日時:2003/04/08 12:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報