2017-03-21 5 views
0

behalten habe Ich habe mich gefragt und gefunden viele Möglichkeiten, .0 aus Doppel zu entfernen, wenn die Formatierung zu Zeichenketten, aber nie gefunden, wie man Zeug für Preise zu halten.Wie man Nullen von Double nach Gleitkomma

DecimalFormat format = new DecimalFormat(); 
format.setDecimalSeparatorAlwaysShown(false); 
switch (position){ 
    case 0:price = 11.90;break; 
    case 1:price = 1.2;break; 
    case 2:price = 1.002;break; 
    case 3:price = 1.0000;break; 
} 
System.out.println(format.format(price)); 
// 11.9 
// or 1.2 
// or 1.002 
// or 1 

aber was ich brauche, ist womthing wie diese

// 11.90 
// 1.2 
// or 1.002 
// or 1 

Dies ist kein Duplikat da, dass man 00 bis jeden Preis hinzufügen wird, die ich nicht will ... ich nur bin auf der Suche um den Gleitpunkt zu entfernen, wenn nach ihm Nullen vorhanden sind, aber wenn eine Zahl vorhanden ist, Null zu behalten.

z.B.

1.0, 1.00 or 1.00000 
should print out 1 

aber

1.90, 1.900 or 1.90000 
should print out the same 1.90, 1900 or 1.900000 
+0

Sie wirklich [sollte nicht 'double' für Währung verwenden] (http://stackoverflow.com/questions/3730019/why-not-use-double-oder-float-to-währung) an erster Stelle. – azurefrog

+0

Möglicherweise müssen Sie das Format zur gleichen Zeit angeben, zu der Sie den Preis angeben, und zwar sowohl im Switch-Case als auch im Switch-Fall. Weil es in den von Ihnen angegebenen Druckformaten nicht wirklich ein Muster gibt.Oder drucken Sie sie als Zeichenfolgen und nicht als Doppel. – AntonH

+0

@AntonH das Muster, nach dem ich suche, ist das Entfernen der Gleitkommazahl "." nur wenn es nicht da ist also keine nummer mit x.0, x.00 oder x.0000000 wird x aber x.20 wird x.20 sein –

Antwort

1

1.90, das gleiche aus 1.901.900 oder 1.90000 gedruckt werden soll, 1900 oder 1.900000

Sie können nicht halten Nullen auf einem primitiven Hinter, so 0.9 ist genau die gleiche Konstante wie 0.90.

C# hat decimal aber Java hat keinen primitiven Datentyp für diesen Zweck.

Java hat eine Klasse gleichwertig mit ähnlichem Verhalten haben, BigDecimal:

BigDecimal d1 = BigDecimal.valueOf(9, 1); // 9/10^1 
BigDecimal d2 = BigDecimal.valueOf(90, 2); // 9/10^2 
System.out.println(d1); //0.9 
System.out.println(d2); //0.90 

http://ideone.com/1gIgIR

1.0, 1.00 oder 1.00000 sollte 1

Sobaldmit ausdruckt, dann ist es nicht so schwer zu überprüfen, ob es sich um eine ganze Zahl ist:

public static boolean isIntegerValue(BigDecimal bd) { 
    return bd.signum() == 0 || bd.scale() <= 0 || bd.stripTrailingZeros().scale() <= 0; 
} 

https://stackoverflow.com/a/12748321/360211

0

Es ist schwierig, die genaue Absicht haben Sie hier zu verstehen. Ich kann verstehen, dass Sie 1000 als 1 darstellen möchten (es gibt einen tatsächlichen Unterschied zwischen den beiden Werten, da einer ein Float oder Double ist und der andere ein Int oder Long ist, aber da es keinen Unterschied zwischen 11,9 und 11,90 gibt mit dem gleichen Objekt dargestellt werden, ist es sehr schwierig, die beiden zu unterscheiden. Mein Rat, über die genauen Bedingungen für jedes Format zu schreiben, wäre, den ursprünglichen Wert des Preises in einem String zu erhalten und dann das Format als anzuwenden eine Funktion der Zeichenfolge (es ist dann einfach endsWith (“. 000") oder was auch immer und behält das ursprüngliche Format in den anderen Fällen entspricht.

+0

würde es funktionieren, aber nicht genau das, wonach ich suche –

Verwandte Themen