trunc(x) on a column turns -0.0 into 0.0

Geschlossen Anfängerfreundlich
#25,702 1 Kommentar 0 Reaktionen 1 zugewiesene Person Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

@1fanwang arbeitet bereits daran.

Seit 25.9.2026.

  • #25732 von @1fanwang — offen

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
75/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
rust, sql
Bereich
databases

Rechercherichtung

Suchen Sie nach der Implementierung der trunc-Funktion in der DataFusion-Codebasis, wahrscheinlich in einer Datei wie expr/scalar.rs oder expr/builtin.rs. Der Fehler liegt im Spaltenpfad, wo x == 0_f64 verwendet wird. Ersetzen Sie diese Bedingung durch eine Prüfung, die das Vorzeichen beibehält, möglicherweise durch direkte Verwendung von x.trunc(). Schreiben Sie einen Test im entsprechenden Testmodul, um zu überprüfen, ob trunc(-0.0) für eine Spalte -0.0 zurückgibt. Führen Sie die vorhandenen SQL-Funktionstests aus, um sicherzustellen, dass keine Regressionen auftreten.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

trunc(x) drops the sign of -0.0, but only when it runs on a column. On a scalar, and for trunc(x, 0), the sign is kept.

SELECT trunc(column1), trunc(column1, 0) FROM (VALUES (CAST(-0.0 AS DOUBLE)));
-- got:      0.0, -0.0
-- expected: -0.0, -0.0

The column code path returns 0.0 for either zero:

if x == 0_f64 { 0_f64 } else { x.trunc() }

-0.0 == 0.0 is true, so -0.0 becomes 0.0. f64::trunc already keeps the sign, so plain x.trunc() would be enough.

Seen through Lance (pylance 12.0.0): trunc(x, 0) on a -0.0 column returns -0.0. This line is the same on main and in 55.1.0. I found no existing issue or PR for it.

Vorherrschende Sprache
Rust
Sterne
9.6k
Forks
2.6k
Ø Merge
3 T. 10 Std.
Gemergte PRs (30 T.)
326

Entwicklungsumgebung

In Codespaces öffnen

Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus apache/datafusion

Alle Issues in apache/datafusion

Ähnliche Issues

Weitere Issues zu Rust

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.