2012-05-03 3 views
0

Я хочу обрезать значение float в Java.truncate a Float в java 1.5 исключая setRoundingMode

Ниже приведены мои требования:

  1. если я 12.49688f, он должен быть напечатан в 12.49 без округления
  2. , если он находится в двойной 12,456, он должен быть напечатан в 12.45 без округления off
  3. В любом случае, если значение равно 12,0, оно должно быть напечатано только как 12.

Условие 3 всегда должно иметь в виду. Оно должно совпадать с усеченной логикой.

P.S: Я использую Java 1.5. Поэтому я знаю, как это сделать в Java 1.6 с использованием десятичного формата и вызова метода setroundingMode(). Мне нужно знать для Java 1.5

ответ

2

Умножьте, используйте Math#floor и разделите, прежде чем предоставлять номер Десятичному формату. Это то же самое, что и обрезание.

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

Это не является совершенным из-за ошибок округления в плавающей точкой расчета, так что вы все равно должны указать N десятичных знаков в DecimalFormat.

 

А (более дорогой, но и более логично) альтернативой является использование 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(); 
1

Конвертировать его в строку и усекать что-либо после второй цифры после периода. отделка "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 
} 

(испытано, работает в моей среде)

+0

это, безусловно, имеет;) – Azfar

+0

@Azfar, я работал на моем месте –

+0

@ Штефана Bachert Если я вхожу 12.2 Это должно дать мне 12.20? – Azfar