17

double を整数部分と小数部分に分けようとしています

たとえば、24.4 という数字は 24 と 4 に分ける必要があります。

int integer = (int)number;
double decimal = number-(int)number;
System.out.println(decimal); 

このメソッドを使用すると、次の値が得られます。

integer = 24
decimal = 0.3999999999999986

10 進数の値を 4 にする必要があります。

この問題はどのように修正できますか?

4

11 に答える 11

9

String を実行できますsplit(...)。次に、IntegerparseInt(...)を使用して 2 つの整数コンポーネントを取得します。

于 2012-10-24T06:44:23.977 に答える
6

これは、doublesが正確に「実数」ではないためです。どの範囲にも実数は無限にありますが、桁数はdouble有限であるため、値の数は有限であるため、丸めを行う必要があります。

実際、24.4は正確に表すことはできません。doubleしたがって、数値の小数部は実際には約0.3999です
。正確な解が必要な場合は、などの小数の正確な値を提供するライブラリを使用する必要がありますBigDecimal

sが正確ではないというこの問題についてもっと理解したい場合は、浮動小数点演算doubleについてもっと読む必要があります。この記事は、高レベルではありますが、何が起こっているのかを実際に理解するためにも必須です。

これらの記事をまだ理解できない場合は、考慮してください。正確な値が必要な場合は、doublesはそれを提供できません。その場合は、ライブラリを使用する必要があります。

于 2012-10-24T06:47:24.230 に答える
5

10 進数の桁数に応じて、次の方法を使用できます。

double number = 24.4;

int integer = (int)number;
double decimal = (10 * number - 10 * integer)/10;

System.out.println(decimal); 

説明: 小数点を削除し、減算を行い、最後に小数点を元の位置に戻します。

于 2012-10-24T07:01:13.633 に答える
4
float number = (float) 22.45;
int integer = (int)number;
double decimal = number-integer;
System.out.println(integer + "decimal" + decimal); 
于 2018-04-05T13:23:50.287 に答える
3

これを達成するために私が書いた小さな方法を次に示します。

/**
 * 
 * @param n
 * @return 
 */
private static double getFractionalPart(double n) {     
    if (n > 0) {
        return n - Math.floor(n);
    } else {
        return ((n - Math.ceil(n)) * -1);
    }
}
于 2016-09-27T15:01:14.157 に答える
0

最初に小数点以下の桁数を見つけ、その数の 10 を乗算する必要があります。例: x=26.78621 次に 100000 を掛けます [ここでは x*10 のように掛けることはできません。再び x*10 など (5 回)、最初に 10 を掛けると 267.862199999 になります..] 掛け算の後結果から 2600000 を引きます。ここに私がコード化したあなたの答えのリンクがあります。 https://stackoverflow.com/a/18517555/2508414

于 2013-09-01T17:36:06.757 に答える
0
double number = 20.57;
Double.valueOf(String.valueOf(number)).intValue()
于 2017-11-21T11:28:56.957 に答える