2010-09-30 5 views

Répondre

-1
new BigDecimal(myfloat) 
+4

Il n'y a pas de constructeur de flotteur, cela est coulée automagiquement à un double, et le constructeur double n'est pas sûr – Alex

-2

Utilisez le constructeur float:

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

Il n'y a pas de constructeur float, il est automagiquement converti en double, et le double constructeur n'est pas sûr – Alex

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

De l'javadocs, le constructeur de chaîne est généralement le meilleur moyen de convertir un float en BigDecimal, car il ne souffre pas de la imprévisibilité du constructeur BigDecimal(double).

Citation de la documentation:

Note: Pour les valeurs autres float et double NaN et ± Infinity, ce constructeur est compatible avec les valeurs renvoyées par Float.toString (float) et Double.toString (Double). Ceci est généralement le moyen préféré pour convertir un float ou un double en BigDecimal, car il ne souffre pas de l'imprévisibilité du constructeur BigDecimal (double).

+4

Mais convertir un 'float' en String explicitement ne vous aide pas à résoudre l'imprévisibilité automatiquement - vous besoin de prendre soin de formater la valeur correctement (arrondi e tc.). – Jesper

8

Pour une précision de 3 chiffres après la virgule:

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

Citation de documentations:

Note: Ceci est généralement le meilleur moyen de convertir un double (ou float) en un BigDecimal, car la valeur renvoyée est égale à celle résultant de la construction un BigDecimal à partir du résultat de l'utilisation de Double.toString (double).

Référence: BigDecimal (Java Platform SE 6)

+0

'Double.toString (float)' produit un résultat différent de 'Float.toString (float) '. –

1

Ceci est jusqu'à ma connaissance:

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; 
    } 

} 

* Note: Ceci est généralement le meilleur moyen de convertir un double (ou flottant) dans un BigDecimal, comme la valeur renvoyée est égale à celle résultant de la construction d'un BigDecimal à partir du résultat de l'utilisation de Double.toString (double).

statique BigDecimal public valueOf (double val)

Paramètres:
val - double pour convertir en BigDecimal.
Renvoie:
un BigDécimal dont la valeur est égale ou approximativement égale à la valeur de val.
Lancers:
NumberFormatException - si val est infini ou NaN.
depuis:
1,5

J'ai vérifié si infini ou non un numéro, de sorte qu'il ya moins de chances de NumberFormatException