[ https://issues.apache.org/jira/browse/ARROW-16223?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Renat Valiullin updated ARROW-16223: ------------------------------------ Description: BasicDecimal128 one(5); // 0.5 one.ReduceScaleBy(1, true); // expected 1, but result is -1 {code:java} BasicDecimal128 BasicDecimal128::ReduceScaleBy(int32_t reduce_by, bool round) const { ... if (remainder.Abs() >= divisor_half) { if (result > 0) { // << should be >= result += 1; } else { result -= 1; } } {code} was: BasicDecimal128 one(5); // 0.5 one.ReduceScaleBy(1, true); // expected 1, but result is -1 BasicDecimal128 BasicDecimal128::ReduceScaleBy(int32_t reduce_by, bool round) const { ... if (result > 0) { // <<< should be >= result += 1; } else { result -= 1; } > BasicDecimal128::ReduceScaleBy with rounding works incorrectly > -------------------------------------------------------------- > > Key: ARROW-16223 > URL: https://issues.apache.org/jira/browse/ARROW-16223 > Project: Apache Arrow > Issue Type: Bug > Components: C++ > Reporter: Renat Valiullin > Priority: Major > > BasicDecimal128 one(5); // 0.5 > one.ReduceScaleBy(1, true); // expected 1, but result is -1 > {code:java} > BasicDecimal128 BasicDecimal128::ReduceScaleBy(int32_t reduce_by, bool round) > const { > ... > if (remainder.Abs() >= divisor_half) { > if (result > 0) { // << should be >= > result += 1; > } > else { > result -= 1; > } > } > {code} > -- This message was sent by Atlassian Jira (v8.20.1#820001)