www.mikrocontroller.net

Forum: Compiler & IDEs double in unsigned long umwandeln


Autor: Alexxx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte einen double Wert in einen unsigned long Wert umwandeln.
Folgendes geht doch nicht!?
//
ulong    Longvar;
double   Doublvar= 1000.1;
Longvar= Doublvar;
// !!

Dazu müsste es doch eine Bibliotheksfunktion geben (dtolong etc.)??
auch trunc() und round() gibt's nicht mit Integer- / Long-Ergebnis...
Ich finde dazu nix passendes.

Wie macht ihr das?

PS: zur Not täte es auch float zu uint(16)...

Autor: klugscheisser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie wäre es mit einem einfachen runden und dann casten?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchen Wert möchtest du denn in Longvar haben, wenn dein Doublvar 
1000.1 beträgt, 1000 oder 1000.1?

Könntest du damit leben, wenn in Longvar das Zehnfache steht, also 
10001, und du so später die 0.1 zurück gewinnen kannst?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexxx schrieb:
> ich möchte einen double Wert in einen unsigned long Wert umwandeln.
> Folgendes geht doch nicht!?

Und warum soll das nicht gehen?

Autor: Alexxx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ kbuchegg:
Setzt der Compiler wirklich eine Umwandlungsfunktion bei der Zuweisung 
"Longvar= Doublvar";
ein??

@ klugscheisser:
Die Frage ist, was wirklich beim Casten passiert.
wenn nur die 64-Bit double-Variable als 64-Bit Long uminterpretiert 
wird, kommt Müll raus.

Letztendlich bleibt die Frage, ob der Compiler das richtige macht.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexxx schrieb:
> @ kbuchegg:
> Setzt der Compiler wirklich eine Umwandlungsfunktion bei der Zuweisung
> "Longvar= Doublvar";
> ein??

Natürlich.
Warum denn nicht?
Alle Kommastellen werden abgeschnitten und was zahlenmässig übrig bleibt 
wird an den long zugewiesen. Was soll auch sonst passieren, was auch nur 
einigermassen sinnvoll wäre.

> @ klugscheisser:
> Die Frage ist, was wirklich beim Casten passiert.

Die eigentliche Frage ist, warum du nicht ein C-Buch liest

Autor: klugscheisser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wer lesen kann ist klar im vorteil ....
bzw. try and error hilft auch manchmal ....

Autor: besserwisser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
klugscheisser schrieb:
> wer lesen kann ist klar im vorteil ....
> bzw. try and error hilft auch manchmal ....

Und wer ganz genau aufgepaßt hat, weiß, daß es eigentlich "trial and 
error" heißt.

Autor: klugscheisser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wo ist der bus?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.