web-dev-qa-db-ja.com

10進数のInteger.parseInt()を行う方法?

Javaコードは次のとおりです。

String s = "0.01";
int i = Integer.parseInt(s);

しかし、これはNumberFormatExceptionをスローしています...何が間違っているのでしょうか?

65
Kevin Boyd

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

57
Joren
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;

iはゼロになります。

84

つかいます、

String s="0.01";
int i= new Double(s).intValue();
25
adatapost
String s="0.01";
int i = Double.valueOf(s).intValue();
16
Swapnil

この種の変換は、実際、Javaでは驚くほど直感的ではありません

たとえば、次の文字列を取ります: "100.00"

C:少なくとも1971年以降の単純な標準ライブラリ関数「atoi」という名前はどこから来たのですか?

int i = atoi(decimalstring);

Java:Double(またはFloat)解析による必須パッセージ、それに続くキャスト

int i = (int)Double.parseDouble(decimalstring);

Javaは確かにスリーブにいくつかの奇妙な点があります

9
Raywell

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();
4
AnnTea

文字列に整数を取ります。

文字列s = "100"; int i = Integer.parseInt(s);またはint i = Integer.valueOf(s);

しかし、あなたの質問では、あなたが変更しようとしている数字は整数です

文字列s = "10.00";

double d = Double.parseDouble(s);

int i =(int)d;

これにより、取得しようとしている値の答えを取得できます。

3
ayushs27

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

2
dominic

これを使う

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

2
Kevin Tan