Javaコードは次のとおりです。10進数のInteger.parseInt()を実行するにはどうすればよいですか?次のように
String s = "0.01";
int i = Integer.parseInt(s);
しかし、これはNumberFormatExceptionがを投げている...何が間違って行くことだろうか?
Javaコードは次のとおりです。10進数のInteger.parseInt()を実行するにはどうすればよいですか?次のように
String s = "0.01";
int i = Integer.parseInt(s);
しかし、これはNumberFormatExceptionがを投げている...何が間違って行くことだろうか?
0.01は整数ではありません(整数)ので、もちろん解析することはできません。代わりにDouble.parseDouble
またはFloat.parseFloat
を使用してください。
String s = "0.01";
double d = Double.parseDouble(s);
int i = (int) d;
例外の理由は、整数が有理数(=基本的に端数)を保持しないためです。だから、0.3
をintに解析しようとするのはナンセンスです。 double
またはfloat
データ型は有理数を保持できます。
方法は、Javaはdouble
int
にはゼロ向かって丸めて小数点の後の部分を除去によって行われるキャスト。
int i = (int) 0.9999;
です。
使用Double.parseDouble(String a)
あなたが探しているのは、整数ではないため、整数ではありません。
使用、
String s="0.01";
int i= new Double(s).intValue();
String s="0.01";
int i = Double.valueOf(s).intValue();
使用この1
int number = (int) Double.parseDouble(s);
この種の変換は、例えば以下の文字列を取るのJava
で実際に驚くほど直感的です。 " 100.00 "
C:シンプルな標準ライブラリ関数、少なくとも1971年以来の(Where did the name `atoi` come from?)
int i = atoi(decimalstring);
のJava:ダブル(またはフロート)によって必須の通路解析し、キャスト
int i = (int)Double.parseDouble(decimalstring);
続きます
Javaは確かに袖が奇妙になります
Cは単に残りの文字列を無視し、解析できるものをすべて解析します(この場合は '100'です)。'atoi'が実際に文字列内のすべての文字列を解析したかどうか、文字列に数値が含まれているかどうか、数値がその型をオーバーフローしているかどうかを知る方法はありません。 'strtol'は上記のすべてのものが検出できるより良い代替手段です。 Javaはより厳格ですが、すべてのケースがカバーされています。 – nhahtdh
これは 'Double.valueOf(" 16543 ")が動作するためRaywellに同意します。intValue();' Javaはintに素早く変換したいときにはPITAになりたいが、Doubleはもっと一般的です。 –
丸めを取得するために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();
あなたのキャストは部分情報を完全に失います。それがアドバイスするのは良い考えだとは思えません。 – Joren
多分私はこのような何かをしなければならないでしょう。Double d = Double.parseDouble(s);右? –
@ヨレン:私は知っているが、彼は整数を望んでいる(彼のコードをチェックすれば) –