[ 
https://issues.apache.org/jira/browse/OFBIZ-2833?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12753418#action_12753418
 ] 

Scott Gray commented on OFBIZ-2833:
-----------------------------------

The problem is right here:
{code}
paymentTypeAmount = new 
BigDecimal(NumberFormat.getNumberInstance(locale).parse(amountStr).doubleValue());
{code}

what we need is a better way to parse a localized amount into a BigDecimal that 
doen't require an intermediate double.

> Receive offline payment (May be the Entity Engine) has decimal precision 
> problem
> --------------------------------------------------------------------------------
>
>                 Key: OFBIZ-2833
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-2833
>             Project: OFBiz
>          Issue Type: Bug
>          Components: framework, order
>    Affects Versions: Release Branch 9.04, SVN trunk
>         Environment: The Database I'm used for testing is the built in Derby. 
> I'm not sure if other DBMS has same problem.
>            Reporter: Miles Huang
>
> Reproduce the problem is simple. In Order Manager Application, simply enter 
> an offline payment for a sales order with amount $65.30, the payment amount 
> stored in the DB will change to $65.29.
> Digging into the code, in the 
> org.ofbiz.order.OrderManagerEvents.receiveOfflinePayment method, although the 
> passed in amountStr is "65.30", the parsed out BigDecimal paymentTypeAmount 
> have value "65.2999999999999971578290569595992565155029296875". Checking the 
> payment amount stored in the Payments entity use web tools, the result is 
> 65.29. And the order still has $0.01 outstanding amount.
> Parse the BigDecimal value from string directly may solve the problem 
> partially. But imagine if someone enters $65.299, the problem is still there.
> Or a better and safe solution, in Entity Engine, always round half up 
> BigDecimal value to the same precision as the corresponding DB column before 
> insert/update?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to