pergunta:
Ao executar operação em dois tipos duplos de valores, às vezes haverá problemas com valores de resultado anormais. por exemplo:
System.out.println (19,99+20); System.out.println (1.0-0.66); System.out.println (0,033*100); System.out.println (12.3/100);
Saída:
39.98999999999999999999995
0,339999999999999999999997
3.300000000000000003
0.123000000000000001
Solução:
Os tipos simples de ponto flutuante flutuam e dobram em Java não podem executar operações porque é normal na maioria dos casos, mas ocasionalmente os problemas, como mostrado acima, ocorrem. Na verdade, esse problema não é um bug no Java, porque o próprio computador é binário e os números de ponto flutuante são apenas valores aproximados. Portanto, quando convertido de números de ponto flutuante binário para decimal, a precisão é facilmente perdida, resultando em uma diminuição da precisão.
Para garantir a precisão, você deve usar a classe BigDecimal e não pode se converter diretamente do duplo para o BigDecimal. Você deve converter duplo em string e depois bigdecimal. Ou seja, você não pode usar o método BigDecimal (Double Val) e descobrirá que não há efeito. Para usar o método BigDecimal (String Val). Exemplos específicos são mostrados abaixo.
Exemplos de quatro operações de tipo duplo:
1. Adicione
public static duplo add (duplo a1, duplo b1) {bigdecimal a2 = novo bigdecimal (duplo.toString (a1)); Bigdecimal b2 = novo bigdecimal (duplo.toString (b1)); retornar A2.Add (B2) .doubleValue (); }2. Subtração
public static duplo sub (duplo a1, duplo b1) {bigdecimal a2 = novo bigdecimal (duplo.toString (a1)); Bigdecimal b2 = novo bigdecimal (duplo.toString (b1)); retornar A2.Subtract (B2) .doubleValue (); }3. Multiplique
public static duplo mul (duplo a1, duplo b1) {bigdecimal a2 = novo bigdecimal (duplo.toString (a1)); Bigdecimal b2 = novo bigdecimal (duplo.toString (b1)); retornar A2.Multiply (B2) .DoubleValue (); }4. Decomposição
public static duplo div (duplo a1, duplo b1, int escala) {if (escala <0) {lança novo ilegalArgumentException ("erro"); } BigDecimal a2 = novo bigdecimal (duplo.toString (A1)); Bigdecimal b2 = novo bigdecimal (duplo.toString (b1)); Retornar A2.Divida (B2, Escala, BigDecimal.Round_Half_Up) .DoubleValue (); }Quando o parâmetro de escala for dividido em incompleto, especifique a precisão.
A solução para o resultado de operação anormal do tipo duplo em Java é todo o conteúdo que compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.