Javaでfloatとdoubleの値を切り捨てたいのですが。
以下は私の要件です:1. 12.49688fがある場合、四捨五入せずに12.49として印刷する必要があります2.ダブルで12.456の場合、四捨五入せずに12.45として印刷する必要があります3.値が12.0、それは12としてのみ印刷されます。
条件3は常に念頭に置いておく必要があります。切り捨てロジックと同時に実行する必要があります。
これを試してください
DecimalFormat df = new DecimalFormat("##.##");
df.setRoundingMode(RoundingMode.DOWN);
System.out.println(df.format(12.49688f));
System.out.println(df.format(12.456));
System.out.println(df.format(12.0));
ここでは、フォーマットに10進フォーマッターを使用しています。丸めモードはDOWNに設定されているため、小数点以下は自動丸めされません。
期待される結果は次のとおりです。
12.49
12.45
12
私はAndroidを使用して同じ問題を抱えていますが、代わりに使用できます:
DecimalFormat df = new DecimalFormat("##.##");
df.setRoundingMode(RoundingMode.DOWN);
ただし、このAPIレベル9が必要です。
別の高速ソリューションは次のとおりです。
double number = 12.43543542;
int aux = (int)(number*100);//1243
double result = aux/100d;//12.43
double d = <some-value>;
System.out.println(String.format("%.2f", d - 0.005);
チェックJava.math.BigDecimal.round(MathContext).
DecimalFormat()
を見てください。
DecimalFormat df = new DecimalFormat("#.##");
DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setDecimalSeparator(',');
df.setDecimalFormatSymbols(dfs);
DecimalFormat を使用してみて、必要なものに一致するように RoundingMode を設定します。