Документация говорит о RoundingMode.HALF_UP
:
Режим округления до «ближайшего соседа», если оба соседа не равноудалены, в этом случае округление вверх.
Хотя это может выглядеть как искомое поведение, это десятичные числа с плавающей запятой, и их трудно представить в памяти.На сайте Oracle .
import java.math.BigDecimal
import java.math.RoundingMode
import java.text.DecimalFormat
fun main(args: Array<String>) {
val f = DecimalFormat("#.##").apply { roundingMode = RoundingMode.HALF_UP }
println(f.format( BigDecimal("-1000.045")))
println(f.format( BigDecimal("-1000.035")))
println(f.format( BigDecimal("-1000.025")))
println(f.format( BigDecimal("-1000.015")))
println(f.format( BigDecimal("-1000.005")))
}
.
есть отличное прочтение. Итак, кажется, что -0,005 и -0,015 оба ближе (ближайший сосед) к -0,01, чем что-либо еще, поэтому они обаотформатированы как -0.01.Чтобы заставить ваш код делать то, что вы хотите, это изменить режим округления на:
roundingMode = RoundingMode.UP
Результат выполнения:
-0.03
-0.02
-0.01
0.01
0.02
0.03
Это именно то, что выожидается.Если вы хотите, чтобы ваш код работал, вы можете использовать следующий подход:
*1019*