web-dev-qa-db-ja.com

javaでfloatとdoubleを切り捨てます

Javaでfloatとdoubleの値を切り捨てたいのですが。

以下は私の要件です:1. 12.49688fがある場合、四捨五入せずに12.49として印刷する必要があります2.ダブルで12.456の場合、四捨五入せずに12.45として印刷する必要があります3.値が12.0、それは12としてのみ印刷されます。

条件3は常に念頭に置いておく必要があります。切り捨てロジックと同時に実行する必要があります。

11
Azfar

これを試してください

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
23
Kshitij

私は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
5
titusfx
double d = <some-value>;
System.out.println(String.format("%.2f", d - 0.005);
3
Prizoff

チェックJava.math.BigDecimal.round(MathContext).

1
Torben

DecimalFormat()を見てください。

DecimalFormat df = new DecimalFormat("#.##");
DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setDecimalSeparator(',');
df.setDecimalFormatSymbols(dfs);
1
revo

DecimalFormat を使用してみて、必要なものに一致するように RoundingMode を設定します。

0
ChadNC