Vladsz83 commented on code in PR #11581:
URL: https://github.com/apache/ignite/pull/11581#discussion_r1806157374


##########
modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/IgniteSqlFunctions.java:
##########
@@ -64,46 +73,42 @@ public static String toString(BigDecimal x) {
         return x == null ? null : x.toPlainString();
     }
 
-    /** */
-    private static BigDecimal setScale(int precision, int scale, BigDecimal 
decimal) {
-        return precision == 
IgniteTypeSystem.INSTANCE.getDefaultPrecision(SqlTypeName.DECIMAL)
-            ? decimal : decimal.setScale(scale, RoundingMode.HALF_UP);
-    }
-
     /** CAST(DOUBLE AS DECIMAL). */
     public static BigDecimal toBigDecimal(double val, int precision, int 
scale) {
-        BigDecimal decimal = BigDecimal.valueOf(val);
-        return setScale(precision, scale, decimal);
+        return removeDefaultScale(precision, scale, 
toBigDecimal(BigDecimal.valueOf(val), precision, scale));
     }
 
     /** CAST(FLOAT AS DECIMAL). */
     public static BigDecimal toBigDecimal(float val, int precision, int scale) 
{
-        BigDecimal decimal = new BigDecimal(String.valueOf(val));
-        return setScale(precision, scale, decimal);
+        return removeDefaultScale(precision, scale, 
toBigDecimal(BigDecimal.valueOf(val), precision, scale));
+    }
+
+    /** Removes redundant scale in case of default DECIMAL (without passed 
precision and scale). */
+    private static BigDecimal removeDefaultScale(int precision, int scale, 
BigDecimal val) {
+        if (precision == DFLT_NUM_PRECISION && scale == 0 && 
val.compareTo(val.setScale(0, NUMERIC_ROUNDING_MODE)) == 0)
+            return val.setScale(0, NUMERIC_ROUNDING_MODE);

Review Comment:
   Without this, the tests fail: `testDecimalScale()`, 
`testNumericConversion()`. Actually, there are questions about current 
precisions of numeric. But in this ticket I didn't fix anithing about it.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@ignite.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to