2010-09-30 23 views

Respuesta

-1
new BigDecimal(myfloat) 
+4

No hay ningún constructor del flotador, esto se automagicamente casting para un doble, y el constructor doble no es seguro – Alex

-2

Utilice la float constructor:

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

No hay un constructor flotante, esto está automágicamente fundido en un doble, y el constructor doble no es seguro – Alex

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

Desde el javadocs, el constructor de cadena es generalmente la mejor forma de convertir un float en un BigDecimal, ya que no sufre de la impredecibilidad del constructor BigDecimal(double).

cita de la docs:

Nota: Para los valores de otro flotador y doble NaN y ± Infinity, este constructor es compatible con los valores devueltos por Float.toString (float) y Double.toString (doble) Esta es generalmente la forma preferida de convertir un flotante o doble en un BigDecimal, ya que no adolece de la imprevisibilidad del constructor BigDecimal (doble).

+4

Pero convertir un 'float' en un String explícitamente no le ayuda a resolver la imprevisibilidad automáticamente - usted debe tener cuidado de formatear el valor correctamente (redondeando e tc.). – Jesper

8

Para una precisión de 3 dígitos después de la coma decimal:

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

Presupuesto de documentaciones:

Nota: Esta es generalmente la forma preferida para convertir un doble (o flotante) en un BigDecimal, ya que el valor devuelto es igual a resultante de la construcción un BigDecimal a partir del resultado de usar Double.toString (doble).

Referencia: BigDecimal (Java Platform SE 6)

+0

'Double.toString (float)' produce un resultado diferente que 'Float.toString (float)'. –

1

Esto es hasta mi conocimiento:

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

} 

* Nota: Esta es generalmente la mejor forma de convertir un doble (o flotar) en un BigDecimal, como el valor devuelto es igual al resultante de construir un BigDecimal a partir del resultado de usar Double.toString (double).

pública estática BigDecimal valueOf (doble val)

Parámetros:
val - doble para convertir a un BigDecimal.
Devuelve:
un BigDecimal cuyo valor es igual o aproximadamente igual al valor de val.
Lanza:
NumberFormatException - si val es infinito o NaN.
desde:
1,5

he comprobado si Infinito o no un número, por lo que hay menos posibilidades de NumberFormatException

Cuestiones relacionadas