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

Re: [riojug] Problema com BigDecimal e DecimalFormat

Expand Messages
  • Ary Junior
    De uma olhada neste link: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4018937 []s Ary Junior
    Message 1 of 3 , May 3, 2005
      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 2 of 3 , May 3, 2005
        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.