Entferne nachgestellte Nullen von double

7

Ich möchte alle abschließenden Nullen entfernen, ohne die Zahl abzuschneiden oder zu runden, wenn sie keine hat. Zum Beispiel könnte die Zahl etwas wie 12.0 sein, in welchem ​​Fall die nachfolgende Null entfernt werden sollte. Aber die Zahl könnte auch etwas fast irrational sein, so wie 12.9845927346958762... auf einen Rand am Bildschirm geht. Gibt es eine Möglichkeit, DecimalFormat oder eine andere Klasse so einzurichten, dass nachfolgende Nullen abgeschnitten werden, während die Irrationalität erhalten bleibt?

    
Mohit Deshpande 01.07.2012, 19:17
quelle

4 Antworten

12

Wenn Sie zu BigDecimal wechseln möchten, gibt es eine # stripTrailingZeroes () Methode, die dies erreicht.

    
Keppil 01.07.2012, 19:27
quelle
7

Sie können die String-Manipulation verwenden, um nachgestellte Nullen zu entfernen.

%Vor%     
sperumal 01.07.2012 19:52
quelle
3
  

private statische Zeichenfolge removeTrailingZeros (double d) {
    Rückgabewert String.valueOf (d) .replaceAll ("[0] * $", "") .replaceAll (". $", "");
  }

oder

  

private statische Zeichenfolge removeTrailingZeros (double d) {
   Rückgabe String.valueOf (d) .replaceAll (".? 0 * $", "");
  }

Dies sind falsche Codes.

  

System.out.println (removeTrailingZeros ( 1234.23432 400000 ));   zurück: 1234.23432
  aber muss zurückkehren: 1234.23432 4

  

private static Zeichenfolge removeTrailingZeros (double myDouble) {
    return (new BigDecimal (Double.toString (myDouble))). toPlainString (). replaceAll ("[0]
* $", "") .replaceAll (". $", "");
  }

Diese Methode funktioniert auch falsch

  

System.out.println (removeTrailingZeros ( 472.304000 ));   gibt 472.30 anstelle von 472.304

zurück      

System.out.println (removeTrailingZeros ( 472304000 ));   gibt 47230 anstelle von 472304000

zurück


Die #stripTrailingZeroes () oder toPlainString () des BigDecimal sind eine gute Methode, aber auch nicht alleine.

// ---------------- BigDecimal.toPlainString -------------
System.out.println ((new BigDecimal (Double.toString ( 4724 ))). ToPlainString ()); System.out.println ((new BigDecimal (Double.toString ( 472304000 ))). ToPlainString ());

gibt zurück:
4724.0 (das ist nicht gut - wir wollen nicht '.0')
472304000 (Das ist in Ordnung)

// ---------------- BigDecimal.stripTrailingZeros ------------- < br> System.out.println ((new BigDecimal (Double.toString ( 4724 )). StripTrailingZeros ())) System.out.println ((new bigDecimal (Double.toString ( 472304000d )). StripTrailingZeros ()));

returns:
4724.0 (Das ist in Ordnung)
4.72304E + 8 (Das ist nicht in Ordnung - wir wollen 472304000 ) < br>

Die perfekte Auflösung des aktuellen Themas "Nachgestellte Nullen vom Doppelten entfernen" verwendet
 .stripTrailingZeros (). toPlainString ()

Zum Beispiel:
// --------- BigDecimal.stripTrailingZeros.toPlainString -----------------
System.out.println (new BigDecimal (Double.toString ( 472.304000 )). StripTrailingZeros (). ToPlainString ()); System.out.println ((new BigDecimal (Double.toString ( 4724 )). StripTrailingZeros (). ToPlainString ())); System.out.println ((new BigDecimal (Double.toString ( 472304000d )). StripTrailingZeros (). ToPlainString ())); Ergebnis ist:
472.304 (korrekt)
4724 (korrekt)
472304000 (korrekt)
p>     

Armando 21.12.2012 19:44
quelle
-2
%Vor%     
Ramgopal Tanikella 19.02.2016 00:01
quelle

Tags und Links