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.