aの小数部分を取得する簡単な方法はdouble
、モジュロ演算子を使用すること%
です。ただし、浮動小数点演算は正確ではないという事実を考慮する必要があります。例えば、
System.out.println(12.1 % 1); // outputs 0.09999999999999964
System.out.println(12.99 % 1); // outputs 0.9900000000000002
小数点以下2桁をとして取得したい場合int
、これは私が求めていると思いますが、次のように、浮動小数点の問題を理解することで、これを実現できます。
System.out.println(Math.round((12.1 % 1) * 100)); // outputs 10
System.out.println(Math.round((12.99 % 1) * 100)); // outputs 99
ただし、BigDecimal
任意精度の演算を使用する、開始したパスをさらに進むことを検討する必要があります。あなたはこのようなことをすることができます:
System.out.println(new BigDecimal("12.1").remainder(BigDecimal.ONE)); // outputs 0.1
System.out.println(new BigDecimal("12.99").remainder(BigDecimal.ONE)); // outputs 0.99
以前のように、これから小数点以下2桁が必要な場合は、次のように実行できます。
System.out.println(new BigDecimal("12.1").remainder(BigDecimal.ONE).multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP).intValue()); // outputs 0.1
System.out.println(new BigDecimal("12.99").remainder(BigDecimal.ONE).multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP).intValue()); // outputs 0.99
これらの最後の2つの方法と最初の2つの方法には、いくつかの違いがあることに注意してください。これらは引数の符号を保持するため、-12.99の最後の例を使用すると、-99が返され、小数部分が処理されます。整数の1であるため、12の最後の例を使用すると、100が返されます。