TL;DR: Use BigDecimal.ROUND_HALF_UP
as rounding Mode and/or use Strings as Input instead of double to create a BigDecimal.
Explenation
Compare the Documentation. Here is what you want:
BigDecimal.ROUND_HALF_UP
Rounding mode to round towards "nearest neighbor" unless both
neighbors are equidistant, in which case round up. Behaves as for
ROUND_UP if the discarded fraction is ≥ 0.5; otherwise, behaves as for
ROUND_DOWN. Note that this is the rounding mode that most of us were
taught in grade school.
VS. what you have used.
BigDecimal.ROUND_CEILING (in your case behaves like BigDecimal.ROUND_UP, see below)
Rounding mode to round towards positive infinity. If the BigDecimal is
positive, behaves as for ROUND_UP; if negative, behaves as for
ROUND_DOWN. Note that this rounding mode never decreases the
calculated value.
You allways round up. and you have a number with decimal places to round because you use a double as Input to create your BigDecimal (see below for an example).
BigDecimal.ROUND_UP
Rounding mode to round away from zero. Always increments the digit
prior to a nonzero discarded fraction. Note that this rounding mode
never decreases the magnitude of the calculated value.
In Addition you should create your BigDecimals from String input not from double. Use quotes "
on the value in the Constructor.
BigDecimal total_Discount = new BigDecimal("10.00");
BigDecimal amount_To_User = new BigDecimal("00.00");
BigDecimal amount_To_Me = new BigDecimal("00.00");
amount_To_User = total_Discount.multiply(new BigDecimal("0.65")).setScale(2, BigDecimal.ROUND_HALF_UP);
amount_To_Me = total_Discount.multiply(new BigDecimal("0.35")).setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(amount_To_User); //6.50
System.out.println(amount_To_Me); //3.50
This will show you why:
System.out.println(new BigDecimal(0.65));
//prints 0.65000000000000002220446049250313080847263336181640625
System.out.println(new BigDecimal("0.65"));
//prints 0.65
A Double has not a perfect precision on every decimal digit while a String has it.