2009-09-20 9 views

答えて

48

0.01は整数ではありません(整数)ので、もちろん解析することはできません。代わりにDouble.parseDoubleまたはFloat.parseFloatを使用してください。

65
String s = "0.01"; 
double d = Double.parseDouble(s); 
int i = (int) d; 

例外の理由は、整数が有理数(=基本的に端数)を保持しないためです。だから、0.3をintに解析しようとするのはナンセンスです。 doubleまたはfloatデータ型は有理数を保持できます。

方法は、Javaはdoubleintにはゼロ向かって丸めて小数点の後の部分を除去によって行われるキャスト。

int i = (int) 0.9999; 

です。

+2

あなたのキャストは部分情報を完全に失います。それがアドバイスするのは良い考えだとは思えません。 – Joren

+1

多分私はこのような何かをしなければならないでしょう。Double d = Double.parseDouble(s);右? –

+1

@ヨレン:私は知っているが、彼は整数を望んでいる(彼のコードをチェックすれば) –

2

使用Double.parseDouble(String a)あなたが探しているのは、整数ではないため、整数ではありません。

18

使用、

String s="0.01"; 
int i= new Double(s).intValue(); 
11
String s="0.01"; 
int i = Double.valueOf(s).intValue(); 
2

使用この1

int number = (int) Double.parseDouble(s);

7

この種の変換は、例えば以下の文字列を取るのJava

で実際に驚くほど直感的です。 " 100.00 "

C:シンプルな標準ライブラリ関数、少なくとも1971年以来のWhere did the name `atoi` come from?

int i = atoi(decimalstring); 

のJava:ダブル(またはフロート)によって必須の通路解析し、キャスト

int i = (int)Double.parseDouble(decimalstring); 
続きます

Javaは確かに袖が奇妙になります

+0

Cは単に残りの文字列を無視し、解析できるものをすべて解析します(この場合は '100'です)。'atoi'が実際に文字列内のすべての文字列を解析したかどうか、文字列に数値が含まれているかどうか、数値がその型をオーバーフローしているかどうかを知る方法はありません。 'strtol'は上記のすべてのものが検出できるより良い代替手段です。 Javaはより厳格ですが、すべてのケースがカバーされています。 – nhahtdh

+0

これは 'Double.valueOf(" 16543 ")が動作するためRaywellに同意します。intValue();' Javaはintに素早く変換したいときにはPITAになりたいが、Doubleはもっと一般的です。 –

2

丸めを取得するためにBigDecimalを使用:

String s1="0.01"; 
int i1 = new BigDecimal(s1).setScale(0, RoundingMode.HALF_UP).intValueExact(); 

String s2="0.5"; 
int i2 = new BigDecimal(s2).setScale(0, RoundingMode.HALF_UP).intValueExact(); 
関連する問題