2010-09-30 6 views

Antwort

-1
new BigDecimal(myfloat) 
+4

Es gibt keinen Schwimmer Konstruktor, diese automatisch zu einem Doppel werfen, und der Doppelkonstruktor ist nicht sicher – Alex

-2

Verwenden Sie den float Konstruktor:

float f = 10.0f; 
BigDecimal b = new BigDecimal(f); 
+7

Es gibt keinen Gleitkomma-Konstruktor, dies wird automatisch in einen Doppelpunkt umgewandelt, und der Doppelkonstruktor ist nicht sicher – Alex

35
BigDecimal value = new BigDecimal(Float.toString(123.4f)); 

Vom javadocs, der Zeichenfolgenkonstruktor im Allgemeinen die bevorzugte Art und Weise ist ein float in eine BigDecimal zu konvertieren, da sie nicht von der nicht leiden Unvorhersagbarkeit des BigDecimal(double) Konstruktors.

Zitat aus der Dokumentation:

Hinweis: Für andere Werte float und double NaN und ± Unendlichkeit, dieser Konstruktor ist kompatibel mit den von Float.toString zurückgegebenen Werte (float) und Double.toString (Doppel). Dies ist im Allgemeinen der bevorzugte Weg, um ein float oder double in ein BigDecimal zu konvertieren, da es nicht unter der Unvorhersehbarkeit des BigDecimal (double) -Konstruktors leidet.

+4

Aber die Umwandlung eines 'float' in einen String hilft Ihnen nicht, die Unvorhersehbarkeit automatisch zu lösen Achten Sie darauf, den Wert korrekt zu formatieren (Rundung e tc.). – Jesper

8

Für eine Genauigkeit von 3 Stellen nach dem Komma:

BigDecimal value = new BigDecimal(f, 
     new MathContext(3, RoundingMode.HALF_EVEN)); 
13
float f = 45.6f; 
BigDecimal bd = BigDecimal.valueOf(f); 

Zitat von Dokumentationen:

Hinweis: Dies ist im Allgemeinen der bevorzugte Weg, um ein Doppeltes zu konvertieren (oder float) in ein BigDecimal, da der zurückgegebene Wert gleich ist, was aus dem Konstruieren resultiert ein BigDecimal aus dem Ergebnis der Verwendung von Double.toString (double).

Referenz: BigDecimal (Java Platform SE 6)

+0

'Double.toString (float)' erzeugt ein anderes Ergebnis als 'Float.toString (float)'. –

1

Dies ist bis zu meinem Wissen:

public static BigDecimal floatToBigDecimal(Float a){ 


    if(a == null || a.isInfinite() || a.isNaN()){ 
     return BigDecimal.ZERO; 
    } 
    try{ 
     return BigDecimal.valueOf(a); 

    }catch(Exception e){ 
     return BigDecimal.ZERO; 
    } 

} 

* Hinweis: Dies ist im Allgemeinen die bevorzugte Art und Weise eines doppelten (oder float) in eine BigDecimal zu konvertieren, wie Der zurückgegebene Wert entspricht dem Wert, der sich aus der Konstruktion von BigDecimal aus dem Ergebnis der Verwendung von Double.toString (double) ergibt.

public static BigDecimal valueOf (double val)

Parameter:
val - doppelt auf eine BigDecimal zu konvertieren.
Gibt zurück:
ein BigDecimal, dessen Wert gleich oder ungefähr gleich dem Wert von val ist.
Würfe:
Number - wenn val unendlich oder NaN ist.
seit:
1,5

ich überprüft haben, ob Stufenlose oder keine Zahl, so dass es weniger Chancen von Number