2013-06-25 2 views
5

я работал над задачей, где я был поражен обработкой негативного сценария, упомянутый нижеКак отформатировать двойной с переменным количеством десятичных цифр

Если значение меньше 1, то я хочу, чтобы отформатировать (добавить) 4 десятичные точки к нему.

Например, если значение равно 0,4567, то мне нужно 0.4567

Или иначе, если значение больше 1 формат только с 2 цифрами.

Например, если значение 444,9, то мне нужно 444.90

Все, что выше работает нормально, но ударил об этом ниже условия

То есть, если значение меньше 1 и заканчивается в виде нулей (0,1000, 0,6000), это не имеет смысла печатать 0.2000, так что в этом случае я хочу выход быть только 0,20

Это моя программа ниже

package com; 
import java.text.DecimalFormat; 
public class Test { 
    public static void main(String args[]) { 
     try { 
      String result = ""; 
      Test test = new Test(); 
      double value = 444.9; 
      if (value < 1) { 
       result = test.numberFormat(value, 4); 
      } else { 
       result = test.numberFormat(value, 2); 
      } 
      System.out.println(result); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    public String numberFormat(double d, int decimals) { 
     if (2 == decimals) 
      return new DecimalFormat("#,###,###,##0.00").format(d); 
     else if (0 == decimals) 
      return new DecimalFormat("#,###,###,##0").format(d); 
     else if (3 == decimals) 
      return new DecimalFormat("#,###,###,##0.000").format(d); 
     else if (4 == decimals) 
      return new DecimalFormat("#,###,###,##0.0000").format(d); 
     return String.valueOf(d); 
    } 

} 
+0

Условие, основанное на x < 1 || x > = 1, тогда, если оно <1 и заканчивается на «00», отключите их? –

ответ

6

использование # если вы хотите игнорировать 0 в 3-й и 4-й знаков после запятой

new DecimalFormat("#,###,###,##0.00##").format(d) 
+1

если он работает, этот ответ определенно лучше моего :) – Dariusz

+0

@ Dariusz- Он должен работать. Попробуй это. – chetan

+0

@chetan действительно отличный ответ, спасибо большое. – Pawan

0

Просто сделайте строку с четырьмя цифрами и проверить конечные нули. Если есть два нуля или меньше, удалите их. В противном случае оставьте его как есть.

result = test.numberFormat(value, 4); 
if (result.endsWith("00")) { 
    result=result.substring(0, result.length()-2); 
} else if (result.endsWith("0")) { 
    result=result.substring(0, result.length()-1); 
} 

Это может быть не оптимально, но его легко читать и обслуживать.

+0

@chetan, кажется, ошибка, если значение равно 0.0007 (заканчивается 3 нулями и числом) – Pawan

Смежные вопросы