2012-05-17 23 views
27
muestra

Mi código:¿Cómo puedo dividir adecuadamente usando BigDecimal

import java.math.*; 

public class x 
{ 
    public static void main(String[] args) 
    { 
    BigDecimal a = new BigDecimal("1"); 
    BigDecimal b = new BigDecimal("3"); 
    BigDecimal c = a.divide(b, BigDecimal.ROUND_HALF_UP); 
    System.out.println(a+"/"+b+" = "+c); 
    } 
} 

El resultado es: 1/3 = 0

¿Qué estoy haciendo mal?

+1

Lo siento por Lorem ipsum pero no me permitiría publicar sin ella como "la pregunta era demasiado corto". –

+0

Su resultado es correcto. Un tercio, redondeado al entero más cercano, rompiendo lazos al redondear, es de hecho un cero plano y redondo. –

+0

Entonces, si necesito 0.33333333? ¿Cómo debo dividir 1 por 3? –

Respuesta

51

No ha especificado una escala para el resultado. Por favor intente esto

import java.math.*; 

    public class x 
    { 
     public static void main(String[] args) 
     { 
     BigDecimal a = new BigDecimal("1"); 
     BigDecimal b = new BigDecimal("3"); 
     BigDecimal c = a.divide(b,2, BigDecimal.ROUND_HALF_UP); 
     System.out.println(a+"/"+b+" = "+c); 
     } 
    } 

esto dará el resultado como 0,33. Por favor leer el API

Rohan

+0

Estaba viendo 1.5 API que carece de 'divite (Sigdecimal, int, int)' ... –

+0

Jan el enlace en mi publicación es para 1.5 API. divide (BigDecimal divisor, int scale, int roundingMode) ha existido por algún tiempo ahora, creo. –

1

Crea el BigDecimal s usando flotadores, como "1.0"; al menos el numerador, si quieres un resultado decimal.

+0

Es 'BigDecimal c = a.setScale (5) .divide (b, BigDecimal.ROUND_HALF_UP);' enfoque correcto? ¿Se puede hacer mejor? –

+0

@JanAjan Sí, ese es probablemente un mejor enfoque. –

Cuestiones relacionadas