From 17cf190f4454fed69609e70509741321efa5d62e Mon Sep 17 00:00:00 2001 From: Kumar Ujjawal Date: Tue, 13 Jan 2026 21:34:50 +0530 Subject: [PATCH 1/2] fix: trunc function with precision uses round instead of trunc semantics --- datafusion/functions/src/math/trunc.rs | 11 +++++------ datafusion/sqllogictest/test_files/scalar.slt | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/datafusion/functions/src/math/trunc.rs b/datafusion/functions/src/math/trunc.rs index 6727ba8fbdf08..dee56cec0826e 100644 --- a/datafusion/functions/src/math/trunc.rs +++ b/datafusion/functions/src/math/trunc.rs @@ -202,12 +202,12 @@ fn trunc(args: &[ArrayRef]) -> Result { fn compute_truncate32(x: f32, y: i64) -> f32 { let factor = 10.0_f32.powi(y as i32); - (x * factor).round() / factor + (x * factor).trunc() / factor } fn compute_truncate64(x: f64, y: i64) -> f64 { let factor = 10.0_f64.powi(y as i32); - (x * factor).round() / factor + (x * factor).trunc() / factor } #[cfg(test)] @@ -238,9 +238,8 @@ mod test { assert_eq!(floats.len(), 5); assert_eq!(floats.value(0), 15.0); - assert_eq!(floats.value(1), 1_234.268); assert_eq!(floats.value(2), 1_233.12); - assert_eq!(floats.value(3), 3.312_98); + assert_eq!(floats.value(3), 3.312_97); assert_eq!(floats.value(4), -21.123_4); } @@ -263,9 +262,9 @@ mod test { assert_eq!(floats.len(), 5); assert_eq!(floats.value(0), 5.0); - assert_eq!(floats.value(1), 234.268); + assert_eq!(floats.value(1), 234.267); assert_eq!(floats.value(2), 123.12); - assert_eq!(floats.value(3), 123.312_98); + assert_eq!(floats.value(3), 123.312_97); assert_eq!(floats.value(4), -321.123_1); } diff --git a/datafusion/sqllogictest/test_files/scalar.slt b/datafusion/sqllogictest/test_files/scalar.slt index 7be7de5a4def8..b0307c4630e20 100644 --- a/datafusion/sqllogictest/test_files/scalar.slt +++ b/datafusion/sqllogictest/test_files/scalar.slt @@ -1165,7 +1165,7 @@ from small_floats; ---- 0.447 0.4 0.447 0.707 0.7 0.707 -0.837 0.8 0.837 +0.836 0.8 0.836 1 1 1 ## bitwise and From 2c4065c601ebd95ff699d23309e2afc610a48ac3 Mon Sep 17 00:00:00 2001 From: Kumar Ujjawal Date: Thu, 15 Jan 2026 13:03:52 +0530 Subject: [PATCH 2/2] revert the deleted assertion --- datafusion/functions/src/math/trunc.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/datafusion/functions/src/math/trunc.rs b/datafusion/functions/src/math/trunc.rs index dee56cec0826e..b0c3b447d784f 100644 --- a/datafusion/functions/src/math/trunc.rs +++ b/datafusion/functions/src/math/trunc.rs @@ -238,6 +238,7 @@ mod test { assert_eq!(floats.len(), 5); assert_eq!(floats.value(0), 15.0); + assert_eq!(floats.value(1), 1_234.267); assert_eq!(floats.value(2), 1_233.12); assert_eq!(floats.value(3), 3.312_97); assert_eq!(floats.value(4), -21.123_4);