1円の単位で金額がおかしくなる現象が発生
Decimalのroundは引数を指定しないと、HALF_EVENでした。
RoundingMode.HALF_UPを引数で指定しないと四捨五入になりませんでした。
横着してはいけないですね。。
以下RoundingMode別のround後の値です。
値 | RoudingMode | |||||||
---|---|---|---|---|---|---|---|---|
指定無 | HALF_EVEN | HALF_UP | HALF_DOWN | CEILING | FLOOR | UP | DOWN | |
2.5 | 2 | 2 | 3 | 2 | 3 | 2 | 3 | 2 |
3.5 | 4 | 4 | 4 | 3 | 4 | 3 | 4 | 3 |
-2.5 | -2 | -2 | -3 | -2 | -2 | -3 | -3 | -2 |
-3.5 | -4 | -4 | -4 | -3 | -3 | -4 | -4 | -3 |
また、setScaleも同様にRoundingModeを指定しないと、HALF_EVENです。
Decimal num1 = 0.25;
Decimal num2 = 0.35;
System.debug( num1.setscale(1) );
System.debug( num2.setscale(1) );
上記の結果は、
num1: 0.2
num2: 0.4
となるので、setScaleの際も、RoundingModeは省略しないで書く必要があります。
num1.setscale(1,RoundingMode.HALF_UP)