WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 10.03.2002, 19:45   #11
JosefS
Veteran
 
Registriert seit: 07.01.2002
Alter: 44
Beiträge: 268


Standard

Zitat:
Original geschrieben von RaistlinMajere
ist ein interessantes verfahren, nur bist du dir sicher, daß das nicht
Code:
dNeueZahl = (double) ((int) (zahl * 100)) / 100;
heißen sollte?

außerdem hat das ganze einen haken, du bekommst nämlich als ergebnis 1234.56, die letzte stelle wird also nicht gerunden, sondern es werden lediglich die unerwünschten kommastellen abgeschnitten.
hm... okok hab die klammern vergessen

Code:
dNeueZahl = (double) ((int) (zahl * 100) + 5) / 100;
und schon isses auch gerundet ;-)
JosefS ist offline   Mit Zitat antworten
Alt 10.03.2002, 20:03   #12
RaistlinMajere
Inventar
 
Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343


Standard

verstehe ich nicht, verfolg das doch mal:

zahl * 100 ergibt 123456.789
dann machst daraus nen integer, wird also 123456
dann +5, also 123461
dann machst ein double daraus, also 123461.0
und dann /100, also 1234.61

stimmt aber nicht, es sollte 1234.57 rauskommen, das wäre korrekt auf 2 stellen gerunden.
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret."
Then he pulled the trigger of his BFG9000.
RaistlinMajere ist offline   Mit Zitat antworten
Alt 10.03.2002, 20:15   #13
JosefS
Veteran
 
Registriert seit: 07.01.2002
Alter: 44
Beiträge: 268


Standard

Zitat:
Original geschrieben von RaistlinMajere
verstehe ich nicht, verfolg das doch mal:

zahl * 100 ergibt 123456.789
dann machst daraus nen integer, wird also 123456
dann +5, also 123461
dann machst ein double daraus, also 123461.0
und dann /100, also 1234.61

stimmt aber nicht, es sollte 1234.57 rauskommen, das wäre korrekt auf 2 stellen gerunden.
hm... vieleicht sollte ich mal was nachrechnen, bevor ich einfach so poste!
dann halt:

dNeueZahl = (double) ((int) (zahl * 100 + 0.5)) / 100;

1234.56789 * 100 = 123456.789
123456.789 + 0.5 = 123457.289
int ( 123457.289 ) = 123457
123457/100 = 1234.57

hab mich um eine kommastelle vertan...
JosefS ist offline   Mit Zitat antworten
Alt 10.03.2002, 20:38   #14
RaistlinMajere
Inventar
 
Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343


Standard

ja, jetzt passts. aber... wieso grad 0.5, wie bist du da drauf gekommen?
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret."
Then he pulled the trigger of his BFG9000.
RaistlinMajere ist offline   Mit Zitat antworten
Alt 10.03.2002, 20:43   #15
moorhahn
Veteran
 
Registriert seit: 26.12.2000
Beiträge: 489


moorhahn eine Nachricht über ICQ schicken
Standard

wenn man es mit (int) castet, dann wird es ja nicht gerundet, sondern es werden einfach die kommastellen weggelassen, oder? in Math gibt es sicher was mit dem du es runden kannst, wenn du z.b. jbuilder von borland verwendest, müsste der dir eigentlich das zeug anzeigen wenn du Math. schreibst.
wenn du den string nimmst mit dem du das unformatierst, kannst du ja den string wieder in double umwandeln, mit doble.parseDouble(zahlstring), oder?
____________________________________
Wenn Null ganz besonders gross ist, ist es schon fast so viel wie ein kleines bisschen Eins... - (Kommentar zum Thema Rundungsfehler bei Fliesskommazahlen).
moorhahn ist offline   Mit Zitat antworten
Alt 10.03.2002, 20:47   #16
JosefS
Veteran
 
Registriert seit: 07.01.2002
Alter: 44
Beiträge: 268


Standard

Zitat:
Original geschrieben von RaistlinMajere
ja, jetzt passts. aber... wieso grad 0.5, wie bist du da drauf gekommen?
denk mal selber drüber nach ;-)

beispiele:

1.34 gerundet = 1.3
1.35 gerundet = 1.4
dh. ab .5 wird die vorige stelle aufgerundet.
na, was muss man dann dazuzuählen, dass bis .4 nix ist und erst ab .5 die zahl vorige zahl um 1 erhöht wird? genau 0.05
und das ganze geht natürlich beliebig nach hinten...

JosefS ist offline   Mit Zitat antworten
Alt 10.03.2002, 20:51   #17
JosefS
Veteran
 
Registriert seit: 07.01.2002
Alter: 44
Beiträge: 268


Standard

Zitat:
Original geschrieben von moorhahn
wenn man es mit (int) castet, dann wird es ja nicht gerundet, sondern es werden einfach die kommastellen weggelassen, oder? in Math gibt es sicher was mit dem du es runden kannst, wenn du z.b. jbuilder von borland verwendest, müsste der dir eigentlich das zeug anzeigen wenn du Math. schreibst.
wenn du den string nimmst mit dem du das unformatierst, kannst du ja den string wieder in double umwandeln, mit doble.parseDouble(zahlstring), oder?
eine zahl in string umwandeln um sie dann zu runden und wieder zurück ist mit kanonen auf spatzen schießen
JosefS ist offline   Mit Zitat antworten
Alt 10.03.2002, 22:19   #18
Tarjan
Quantensingularität
 
Registriert seit: 28.09.2000
Alter: 55
Beiträge: 8.336


Tarjan eine Nachricht über ICQ schicken
Standard

Warum verwendet ihr nicht die Math.round() Funktion? Die ist für das geschrieben worden:

doubleZahl = ((double)Math.round(doubleZahl * 100)) / 100
____________________________________
Was ist klein, grün und dreieckig?
Ein kleines grünes Dreieck!


Bahnübergänge sind die härtesten Drogen der Welt! Ein Zug und du bist weg!
Tarjan ist offline   Mit Zitat antworten
Alt 10.03.2002, 22:53   #19
RaistlinMajere
Inventar
 
Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343


Standard

Zitat:
Original geschrieben von Tarjan
Warum verwendet ihr nicht die Math.round() Funktion? Die ist für das geschrieben worden:

doubleZahl = ((double)Math.round(doubleZahl * 100)) / 100
stimmt, simpler dürfte es wohl nicht mehr gehen.
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret."
Then he pulled the trigger of his BFG9000.
RaistlinMajere ist offline   Mit Zitat antworten
Alt 11.03.2002, 09:32   #20
Tarjan
Quantensingularität
 
Registriert seit: 28.09.2000
Alter: 55
Beiträge: 8.336


Tarjan eine Nachricht über ICQ schicken
Standard

Bin nacher noch draufgekommen, geht auch ohne expliziten Cast:
doubleZahl = Math.round(doubleZahl * 100) / 100.0
____________________________________
Was ist klein, grün und dreieckig?
Ein kleines grünes Dreieck!


Bahnübergänge sind die härtesten Drogen der Welt! Ein Zug und du bist weg!
Tarjan ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:08 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag