AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Trunc

Ein Thema von hhcm · begonnen am 19. Apr 2018 · letzter Beitrag vom 22. Apr 2018
Antwort Antwort
hhcm

Registriert seit: 12. Feb 2006
Ort: Wegberg
310 Beiträge
 
Delphi 11 Alexandria
 
#1

Probleme mit Trunc

  Alt 19. Apr 2018, 11:34
Hallo zusammen,

kann mir mal jemand auf die Sprünge helfen?

Delphi-Quellcode:
var
    c: Int64;
    a,b: Double;
begin
  a := 1.71;
  c := Trunc(a*100); // C=170

  a := 1.71;
  b := a*100;
  c := Trunc(b); // C=171
Warum ist der erste versuch falsch?
Chris
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#2

AW: Probleme mit Trunc

  Alt 19. Apr 2018, 11:52
Ich vermute, daß Du mit der 32-Bit-Version rechnest.

Dann ist das erste Ergebnis verständlich, da a*100 als Extended gerechnet wird: Das Zwischenresultat 170.999999999999996 wird dann auf 170 abgeschnitten.

Unter 64-Bit ist das Zwischenresultat 171.000000000000000.

Im Deinem zweiten Fall wird das Zwischenresultat erst nach Double gerundet und in b gespeichet (hat also wie bei 64-Bit den Wert 171.0)
  Mit Zitat antworten Zitat
OLDIE1950

Registriert seit: 2. Jan 2018
22 Beiträge
 
#3

AW: Probleme mit Trunc

  Alt 19. Apr 2018, 12:10
In Delphi konvertiert Trunc eine Gleitkommazahl in einen Integer-Wert.
X ist ein Ausdruck des Typs Real.
Trunc gibt einen Int64-Wert mit dem gegen 0 gerundeten Wert von X zurück.
http://docwiki.embarcadero.com/Libra...e/System.Trunc
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#4

AW: Probleme mit Trunc

  Alt 19. Apr 2018, 12:17
In Delphi konvertiert Trunc eine Gleitkommazahl in einen Integer-Wert.
X ist ein Ausdruck des Typs Real.
Das erklärt das Problem nicht! Das Wesentliche ist, daß X extended ist bei trunc(a*100).
  Mit Zitat antworten Zitat
hhcm

Registriert seit: 12. Feb 2006
Ort: Wegberg
310 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Probleme mit Trunc

  Alt 19. Apr 2018, 12:17
Ok, das hab ich soweit verstanden.
Trotzdem stehe ich jetzt noch dümmer da als vorher
Heute ist einfach nicht mein Tag.

Ich möchte eigentlich nur einen Eurowert in Cent umrechnen und das möglichst ohne Rundungsfehler
Tatsächlich wird mit 32Bit kompiliert.
Chris
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#6

AW: Probleme mit Trunc

  Alt 19. Apr 2018, 12:31
Dann rechne komplett 64-Bit-Integer oder mit Currency (<- dazu kann ich Dir aber nicht mehr sagen, siehe zB http://docwiki.embarcadero.com/Libra...ystem.Currency oder https://stackoverflow.com/questions/...ing-a-currency).

Oder wenn Du manuell wie oben mit 100 multiplizierst, sollte auch round statt trunc weiterhelfen.

Geändert von gammatester (19. Apr 2018 um 12:38 Uhr)
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
721 Beiträge
 
Delphi 12 Athens
 
#7

AW: Probleme mit Trunc

  Alt 19. Apr 2018, 13:02
Ich möchte eigentlich nur einen Eurowert in Cent umrechnen und das möglichst ohne Rundungsfehler
Dann nimm doch einfach Round statt Trunc. Dann sollte auch Round(a*100) funktionieren.
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
258 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Probleme mit Trunc

  Alt 20. Apr 2018, 08:01
Ich möchte eigentlich nur einen Eurowert in Cent umrechnen und das möglichst ohne Rundungsfehler
Wenn es Dir um korrekte ct Beträge geht solltest Du aber bedenken, dass Delphi nicht kaufmännisch rundet.

Hier ein Artikel dazu:
https://www.delphi-treff.de/tipps-tr...orrekt-runden/
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz