Loading ...
Sorry, an error occurred while loading the content.

Problema com BigDecimal e DecimalFormat

Expand Messages
  • Timothy Ryan High
    Pessoal, Estou com um problema chato de formatação de números do tipo BigDecimal. Estou usando a classe DecimalFormat para formatar meus valores para a
    Message 1 of 3 , May 3, 2005
    • 0 Attachment
      Pessoal,
      Estou com um problema chato de formatação de números do tipo BigDecimal.
      Estou usando a classe DecimalFormat para formatar meus valores para a tela,
      mas percebi que acima de um certo valor, a formatação começa a perder
      precisão. Experimentei e descobri que a perda de precisão é exatamente igual
      à perda como se eu tivesse usando double em vez de BigDecimal:

      Valor BigDecimal = 1234567890123456.75
      Valor double = 1.2345678901234568E15
      Valor formatado = 1234567890123456,80

      Valor BigDecimal = 456457546654656.69
      Valor double = 4.564575466546567E14
      Valor formatado = 456457546654656,70

      Só posso pensar que a DecimalFormat (ou a NumberFormat) está convertendo o
      BigDecimal em double antes de fazer a formatação. Alguém sugere um método
      melhor, ou será que vou precisar criar meu próprio método para realizar a
      formatação?

      abs,
      tim.

      Timothy Ryan High
      Arquiteto de Sistemas

      e-Dablio - Soluções em TI
      Empresa certificada CMM Nível 2 - ISO 9001:2000

      Rio: Tel 55 21 2141-0650 Fax 55 21 2507-0420
      Sede SP: Tel/Fax 55 11 3285-6969

      http://www.e-dablio.com
    • Ary Junior
      De uma olhada neste link: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4018937 []s Ary Junior
      Message 2 of 3 , May 3, 2005
      • 0 Attachment
        De uma olhada neste link:

        http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4018937

        []s

        Ary Junior

        Timothy Ryan High wrote:

        > Pessoal,
        > Estou com um problema chato de formatação de números do tipo BigDecimal.
        > Estou usando a classe DecimalFormat para formatar meus valores para a
        > tela,
        > mas percebi que acima de um certo valor, a formatação começa a perder
        > precisão. Experimentei e descobri que a perda de precisão é exatamente
        > igual
        > à perda como se eu tivesse usando double em vez de BigDecimal:
        >
        > Valor BigDecimal = 1234567890123456.75
        > Valor double = 1.2345678901234568E15
        > Valor formatado = 1234567890123456,80
        >
        > Valor BigDecimal = 456457546654656.69
        > Valor double = 4.564575466546567E14
        > Valor formatado = 456457546654656,70
        >
        > Só posso pensar que a DecimalFormat (ou a NumberFormat) está convertendo o
        > BigDecimal em double antes de fazer a formatação. Alguém sugere um método
        > melhor, ou será que vou precisar criar meu próprio método para realizar a
        > formatação?
        >
        > abs,
        > tim.
        >
        > Timothy Ryan High
        > Arquiteto de Sistemas
        >
        > e-Dablio - Soluções em TI
        > Empresa certificada CMM Nível 2 - ISO 9001:2000
        >
        > Rio: Tel 55 21 2141-0650 Fax 55 21 2507-0420
        > Sede SP: Tel/Fax 55 11 3285-6969
        >
        > http://www.e-dablio.com
        >
        >
        >
        >
        > -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
        > Rio Java Users Group www.riojug.org
        > E-mail dos Moderadores riojug-owner@yahoogroups.com
        >
        > Patrocínio: Quality Software, SENAC-Rio CIT, Locaweb
        > Apoio: Java Magazine, SQL Magazine
        > -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
        > Participe também das outras listas do RioJUG:
        > SCJP (groups.yahoo.com/group/scjp_riojug)
        > SCWCD (groups.yahoo.com/group/scwcd_riojug)
        > -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
        >
        >
        > ------------------------------------------------------------------------
        > *Yahoo! Groups Links*
        >
        > * To visit your group on the web, go to:
        > http://groups.yahoo.com/group/riojug/
        >
        > * To unsubscribe from this group, send an email to:
        > riojug-unsubscribe@yahoogroups.com
        > <mailto:riojug-unsubscribe@yahoogroups.com?subject=Unsubscribe>
        >
        > * Your use of Yahoo! Groups is subject to the Yahoo! Terms of
        > Service <http://docs.yahoo.com/info/terms/>.
        >
        >
      • Fernando Santucci
        Timothy, Se for possível utilizar o JDK 1.5.0, ele tem uma nova classe inspirada no printf do C++ chamada java.util.Formatter que resolve seu problema.
        Message 3 of 3 , May 3, 2005
        • 0 Attachment
          Timothy,

          Se for possível utilizar o JDK 1.5.0, ele tem uma nova classe inspirada no
          "printf " do C++ chamada "java.util.Formatter" que resolve seu problema.

          Tenho usado ele para formatação de "java.math.BigDecimal" e "java.math.BigInteger" com frequencia.

          Se precisar, em anexo tem uma classe minha de construção de valores ENORMES por extenso, útil
          para confeccionar Cheques, Faturas e Duplicatas.

             StringBuilder sb = new StringBuilder();
             // Send all output to the Appendable object sb.
             Formatter formatter = new Formatter(sb, Locale.US);

             // Optional locale as the first argument can be used to get
             // locale-specific formatting of numbers.  The precision and width can be
             // given to round and align the value.
             formatter.format("%-,27.3f", 25.6785);
             // -> Result: "25,679"


          Um grande abraço e boa sorte,

          Fernando Santucci



          Timothy Ryan High wrote:
          Pessoal,
          Estou com um problema chato de formatação de números do tipo BigDecimal.
          Estou usando a classe DecimalFormat para formatar meus valores para a tela,
          mas percebi que acima de um certo valor, a formatação começa a perder
          precisão. Experimentei e descobri que a perda de precisão é exatamente igual
          à perda como se eu tivesse usando double em vez de BigDecimal:

          Valor BigDecimal = 1234567890123456.75
          Valor double = 1.2345678901234568E15
          Valor formatado = 1234567890123456,80

          Valor BigDecimal = 456457546654656.69
          Valor double = 4.564575466546567E14
          Valor formatado = 456457546654656,70

          Só posso pensar que a DecimalFormat (ou a NumberFormat) está convertendo o
          BigDecimal em double antes de fazer a formatação. Alguém sugere um método
          melhor, ou será que vou precisar criar meu próprio método para realizar a
          formatação?

          abs,
          tim.

          Timothy Ryan High
          Arquiteto de Sistemas

          e-Dablio - Soluções em TI
          Empresa certificada CMM Nível 2 - ISO 9001:2000

          Rio: Tel 55 21 2141-0650 Fax 55 21 2507-0420
          Sede SP: Tel/Fax 55 11 3285-6969

          http://www.e-dablio.com

        Your message has been successfully submitted and would be delivered to recipients shortly.