Pessoal, estou precisando trabar com precisao de parcelas, oque vocês aconselham ??? faço o calculo de parcelas dividindo o valor principal, e estou tendo problemas de arredondamento, depois que obtenho as parcelas, ao soma-las, o valor é diferente do que eu tinha inicialmente, por causa justamente de arredondamento.
Calculo de parcelas
6 Respostas
Essa é boa …
Vamos lá. Qdo eu tive q fazer um sofware q calculava parcelas tive o mesmo problema.
Resolvi multiplicando o valor da parcela pelo número de (parcelas -1). A última parcela é a diferenca do valor obtido menos o total.
Ou seja. A última é diferenciada, para mais ou para menos. A sua regra de negócio determinará se é possível uma das parcelas ser diferente.
Isso deve ser pq vc esta usando o tipo Float para fazer isso, para calculos mais precisos deve usar Double
Referencia retirada do site da sun
# float: The float data type is a single-precision 32-bit IEEE 754 floating point. Its range of values is beyond the scope of this discussion, but is specified in section 4.2.3 of the Java Language Specification. As with the recommendations for byte and short, use a float (instead of double) if you need to save memory in large arrays of floating point numbers. This data type should never be used for precise values, such as currency. For that, you will need to use the java.math.BigDecimal class instead. Numbers and Strings covers BigDecimal and other useful classes provided by the Java platform.double: The double data type is a double-precision 64-bit IEEE 754 floating point. Its range of values is beyond the scope of this discussion, but is specified in section 4.2.3 of the Java Language Specification. For decimal values, this data type is generally the default choice. As mentioned above, this data type should never be used for precise values, such as currency.
detalhe: eu uso Double.
Normalmente você faz o que o Z lhe recomendou.
Isso você pode ver facilmente se você quiser pagar R$100,00 em 3 parcelas.
A primeira e a segunda parcelas são de R$ 33,33. A última será de R$ 33,34.
É que você não pode pagar uma parcela de R$ 33,333333333333333333333… Me mostre uma moeda de 33,333333… centavos.
a unica forma que conheço realmente é fazendo com que uma das parcelas
compense essa diferença, pois como a moeda só tem 2 casas decimais é quase impossível se obter uma
divisão em que não será necessário arredondar ou suprimir o valor.
Se quiser precisão, NÃO UTILIZE DOUBLE, utilize java.math.BigDecimal.
Apenas para ilustrar, execute a seguinte linha de código e se surpreenda com o resultado:
System.out.println(1.0 - 0.9);
Fernando Rosa