2017-10-13 4 views
0

Angesichts dieser Zahlen dezimal:Java Round dezimal - zweite Einzelfall Null

  • 150,00
  • 150,26

Ich brauche wie dies abzurunden:

  • Wenn der zweite Wert des Dezimalteils ist Null (0), dann sollte der neue Wert 150.0 sein
  • Wenn t Der zweite Wert des Dezimalteils ist anders als Null (0), dann behält der neue Wert beide Dezimalstellen bei. Beispiel: 150.26

Gibt es eine Rundungsmethode, die das kann?

Danke.

Mein Code hier:

String monto = "150.10";//150.26 
String nuevoMonto = ""; 
String[] valores = monto.split("\\."); 
System.out.println("Valores : " + valores); 
System.out.println("Valores length: " + valores.length); 
for (int i = 0; i < valores.length; i++) { 
    System.out.println("-->Valor: " + valores[i]); 
} 
if (valores.length == 2) { 
    nuevoMonto = valores[1]; 
    System.out.println("Nuevomonto: " + nuevoMonto); 
    if (nuevoMonto.length() == 2) { 
    System.out.println("Dos posiciones decimales"); 
    System.out.println(nuevoMonto.indexOf("0")); 
    if (nuevoMonto.indexOf("0") == 1) { 
     nuevoMonto = valores[0] + "." + nuevoMonto.substring(0, 1); 
    } 
    } 

} 

System.out.println("Nuevo monto: " + nuevoMonto); 
+0

Schwer zu wissen, was Sie wirklich wollen, bitte zeigen Sie auch, was Sie bisher versucht haben. Wenn Sie mit Geld arbeiten, könnte dies eine ziemlich willkürliche Art sein, Werte zu runden. '150.10 -> 150.10 ... 150.09 -> 150.00' wäre ein ziemlich großer Unterschied. Also, warum willst du diesen Weg machen? – hamena314

+1

@ hamena314 er sagte ** Sekunde ** Wert der Dezimalstelle ... Also 150.10 -> 150.1 und 150.09 -> 150.09 –

+1

Was ist mit 150.101? Oder vielleicht kann das nicht passieren? – Stefan

Antwort

3

versuchen, etwas wie folgt aus:

DecimalFormat decimalFormat = new DecimalFormat("#.0#"); 
System.out.println(decimalFormat.format(150.09)); 
System.out.println(decimalFormat.format(150.10)); 

Der String im neuen Dezimalformat ermöglicht # s getrimmt werden, und 0 s gezwungen sind, zu bleiben

0

Wenn Sie eine Zeichenfolge haben, um mit zu beginnen, gibt es vielleicht keinen Punkt, es zu einer Gleitkommazahl zu analysieren und es dann neu zu formatieren. Ein anderer Ansatz besteht darin, eine Regexp dafür zu verwenden:

String monto = "150.10"; 
String nuevoMonto = monto.replaceAll("(?<=\\.\\d)0$", "") 

Die Regexp besteht aus zwei Teilen. Der erste Teil (?<=\\.\\d) besagt, dass dem Spiel ein Punkt und eine Ziffer vorangestellt werden müssen. Der zweite Teil 0$ stimmt mit der abschließenden Null am Ende der Zeichenfolge überein. Wir ersetzen es durch nichts.

0

Es gibt einen Ausdruck in Java namens floor-Methode, der verwendet werden kann, um einen Wert mit jeder Form der Rundung auf einen ganzzahligen Wert mit allen relevanten Dezimalstellen aus den Daten eine einfache Überprüfung für diese Welt zu nehmen die Daten und prüfen, ob die Daten nicht modulo oder mod einer Null Beispielcode könnte so aussehen.

if ((monto % 0.1) == 0) 
{ 
    //has no relevant data so it should be floored 
    Nuevomonto = floor (monto); 
} 
else 
{ 
Nuevomonto = monto; 
} 

hoffe das hilft.