0

Javaでfloat値を切り捨てたい。

以下は私の要件です:

  1. 12.49688fを使用している場合は、四捨五入せずに12.49として出力する必要があります。
  2. ダブルで12.456の場合は、四捨五入せずに12.45として印刷する必要があります。
  3. いずれにせよ、値が12.0のような場合は、12としてのみ出力する必要があります。

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

PS:私はJava1.5を使用しています。だから私はJava1.6でそれを行う方法を知っています。つまり、DecimalFormatを使用してsetroundingMode ()Methodを呼び出します。Java1.5について知る必要があります

4

2 に答える 2

2

DecimalFormat に数値を提供する前に、乗算、Math#floorおよび除算を使用します。これは、cutoff roundig と同じです。

// Replace N with the desired number of decimals after the comma
number = Math.floor(1eN * number) / 1eN

これは、浮動小数点計算の丸め誤差のために完全ではないため、DecimalFormat に N 個の小数を指定する必要があります。

 

(より高価ですが、より論理的な) 代替手段は、BigDecimalを使用することです。

// Given as seperate statements for clarity, but these can be combined into a single line
// Replace "N" with the number of decimals after the comma
MathContext NDecimals = new MathContext(N, RoundingMode.FLOOR);
BigDecimal bdNumber = new BigDecimal(number, NDecimals);
number = bdNumber.doubleValue();
于 2012-05-03T11:28:59.440 に答える
1

文字列に変換し、ピリオドの後の 2 桁目以降を切り捨てます。「0」と「.」をトリムします。「。」がある場合

String x = Double.toString (12.456); // or Float.toString (12.49688f);

int pos = x.indexOf ('.');  // 
if (pos >= 0) {
  int end = Math.min(pos + 2, x.length() - 1); // truncate after 2 digits
  while (x.charAt (end) == '0') end --;  // trim 0
  if (x.charAt (end) == '.') end --; // trim .
  x = x.substring(0, end + 1);       // really truncate
}

(テスト済み、私の環境で動作します)

于 2012-05-03T11:29:15.853 に答える