BigDecimal operator overloading with java method

A sample expressions
BigDecimal(100)*BigDecimal(10).divide(BigDecimal(30),2,RoundingMode.HALF_UP)
Instinctively,we expect 33.33 but now result is 33.00,so why compiler do not execute operator overloading times method first.

Because the .-operator has a higher precedence than the *-operator. Operator precedence can only work properly if you use basic mathematical operators. Normal function calls like .divide(...) have a higher precedence.

This example has the same problem

import kotlin.math.*
fun main() {
//sampleStart
fun Int.abs() = abs(this)
println(-5.abs())
//sampleEnd
}

Here the minus has a lower precedence than the function call Int.abs(). Therefore we calculate 5.abs() first and only then take the negative.