整数値に変換したいdouble値があります。ただし、double値は十分に大きいため、問題が発生します。次に例を示します。
double val1 = 74.1234567890
int val2;
741234567890
val2の値を小数点なしの値と等しくしたい。誰かがこれを達成する方法について何か提案がありますか?
そして、あなたは何から欲しいですか74.1234560000
。常に10桁の場合はval * 1e10
、適切な大きさの整数型に変換して処理を実行します。それ以外の場合は、必要なものをより明確に定義する必要があります。を初期化するために使用された文字列に基づいている場合、double
それを行うことはできません。多くの異なる文字列は、実数として解釈された場合に異なる値を表す文字列を含め、まったく同じ内部値になる可能性があります。もう一方の極端な例として、値に10の負の累乗を掛けた値が正確に浮動小数点の値になるような最小の整数値が必要な場合、ほとんどの浮動小数点値には10進数の52桁などが必要です。ほぼ確実に、ネイティブの整数型には適合しません。
Javaでできることの1つは、それを文字列に解析し、次にドットを取り除き、その後、それをintに解析することです。
double val1 = 74.1234567890;
String str = String.parse(val1);
str = str.replace(".", "");
int val2 = Integer.parse(str);
doubleは2ワード(8バイト)を保持し、intは2(4バイト)のみを保持するため、あなたのような変換はオーバーフローを引き起こすことを覚えておいてください。
まず第一に、intは-2,147,483,648から2,147,483,647の間の値しか保持できません。したがって、741234567890は適合しません。そのためには長い時間が必要になります(@DanielFischerを参照)
例のために行うことができます:
//silly conversion
double val1 = 74.1234567890;
long val2 = Math.round(val1 * 10000000000);
他の値をサポートし、「。」のようなものが必要な場合。リムーバー、これには文字列の使用を検討する必要があります。
doubleをintではなくStringに変換します。