Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » double Nachkommastellen abschneiden

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
08.12.2004, 12:43 Uhr
derphilipder



Hallo!

Folgendes Problem:

Ich habe einen doublewert z.B. x=23.34562 und moechte ab der zweiten Nachkommastelle Nullen haben.
Bisher mache ich das so:

C++:
x*=100; //==> x=2334.62
x-=(int)x;//==> x=2334
x/=100;//==> x=23.34



Das kann man aber wohl kaum als saubere Lösung bezeichnen, aber mir fällt nix anderes ein...
Vielleicht ne Bitmaske?
Oder denke ich einfach viel zu kompliziert...?

Wer weiß Rat?
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.12.2004, 13:20 Uhr
Hans
Library Walker
(Operator)


Hi,

was viel besseres fällt mir dazu jetzt auch nicht ein, ausser, das Du dir das in ein Funktion packst, die diese Arbeit für Dich erledigt. Etwa so, (ungestestet):

C++:
double rounded (double x, int nks)
{
  int z=0;

  if (!nks) z=1;
  else  z = 10 * nks;   // nks = NachKommaStellen

  x= x * z + 0.5; // +.5 um die letzte Stelle richtig zu runden
  x =(int)x; //
  x/=z; //
  return x;
}



Der Funktion übergibst Du die zu rundende Zahl, und die Anzahl der Nachkommastellen, und sie liefert Dir die Zahl passend gerundet zurück.


Zitat:
Vielleicht ne Bitmaske?
Oder denke ich einfach viel zu kompliziert...?

Wie das mit 'ner Bitmaske funktionieren soll, ist mir Schleierhaft. Deshalb tippe ich da mal auf letzteres; - das passiert mir nämlich auch dauernd...

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 08.12.2004 um 13:24 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.12.2004, 13:35 Uhr
Hans
Library Walker
(Operator)


Hi,

Nachtrag: Vielleicht lässt sich auch mit den Funktionen floor und modf aus der Mathebibliothek noch was "basteln", das genauer ist, als mein Vorschlag da oben. Aber wirklich sicher bin ich mir da nicht.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.12.2004, 14:30 Uhr
Tommix



Hallo,
@Hans:
Zitat:

C++:
z = 10 * nks;


ergibt bei zwei Kommastellen 20 und nicht 100, da muß dann wohl pow hin und
@Philip
behalte dabei im Hinterkopf, das auch nach dem Runden der gespeicherte Wert 4.1500000000001 oder so sein kann, je nachdem wie es binär gerade paßt.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
08.12.2004, 14:40 Uhr
Tommix



Beim Vorzeichen muß man auch noch aufpassen (beim Runden):

C++:
#include <math.h>

double rounded (double x, unsigned nks)
{
  int z = (int)pow(10, nks);

  x= x * z + (x < 0 ? -0.5 : 0.5);
  x =(int)x;
  
  return x/z;
}



- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
08.12.2004, 18:49 Uhr
derphilipder



Ich denke, mit dem math-Funktionen sollte sich was machen lassen - besten Dank!
--
Konfuzius says: "A man who goes to bed with an itchy asshole is a man who wakes up with stinky finger!"
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
08.12.2004, 19:45 Uhr
Hans
Library Walker
(Operator)



Zitat von Tommix:
Hallo,
@Hans:
Zitat:

C++:
z = 10 * nks;


ergibt bei zwei Kommastellen 20 und nicht 100, da muß dann wohl pow hin und

Gruß, Tommix

@ Tommix,
jauuu, stimmt! - Das kommt davon, wenn man das "mal eben" so dahin tippert...
Na ja, . für den Hinweis.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: