Frage dezimal vs doppelt! - Welchen sollte ich verwenden und wann? [Duplikat]
Diese Frage hat hier bereits eine Antwort:
Ich sehe immer wieder Leute, die Double in C # benutzen. Ich weiß, ich habe irgendwo gelesen, dass Doppelgänger manchmal die Präzision verlieren.
Meine Frage ist wann sollte ein Double verwendet werden und wann sollte ich einen Dezimaltyp verwenden?
Welcher Typ eignet sich für Geldberechnungen? (dh mehr als $ 100 Millionen)
756
2017-07-22 14:37
Ursprung
Antworten:
Für Geld, immer Dezimal. Deshalb wurde es geschaffen.
Wenn die Zahlen korrekt addiert werden müssen, oder das Guthaben, verwenden Sie die Dezimalzahl. Dies umfasst alle finanziellen Speicher oder Berechnungen, Punkte oder andere Zahlen, die Menschen von Hand tun könnten.
Wenn der genaue Wert der Zahlen nicht wichtig ist, verwenden Sie double für die Geschwindigkeit. Dies umfasst Grafik-, Physik- oder andere physikalische Naturwissenschaften Berechnungen, wo bereits eine "Anzahl von signifikanten Ziffern" vorhanden ist.
901
2017-07-22 14:42
Meine Frage ist wann sollte ein Gebrauch sein
doppelt und wann sollte ich eine Dezimalstelle verwenden
Art?
decimal
wenn du mit Werten im Bereich von 10 ^ (+/- 28) arbeitest und wo du Erwartungen über das Verhalten basierend auf Basis-10-Darstellungen hast - im Grunde genommen Geld.
double
für wenn Sie brauchen relativ Genauigkeit (d. h. Verlust der Genauigkeit in den hinteren Ziffern bei großen Werten ist kein Problem) über wild unterschiedliche Größen - double
deckt mehr als 10 ^ (+/- 300) ab. Wissenschaftliche Berechnungen sind hier das beste Beispiel.
welcher Typ ist für Geld geeignet?
Berechnungen?
Dezimal, Dezimal, Dezimal
Akzeptiere keinen Ersatz.
Der wichtigste Faktor ist das double
, die als binärer Bruch implementiert sind, können viele nicht genau darstellen decimal
Brüche (wie 0,1) überhaupt und seine Gesamtzahl von Ziffern ist kleiner, da es 64 Bit breit gegenüber 128 Bit ist decimal
. Schließlich müssen Finanzanwendungen oft spezifisch folgen Rundungsmodi (manchmal gesetzlich vorgeschrieben). decimal
unterstützt diese; double
nicht.
157
2017-07-22 15:12
System.Single / schweben - 7 Ziffern
System.Double / doppelt - 15-16 Ziffern
System.Decimal / Dezimal - 28-29 signifikante Ziffern
Die Art, wie ich gestochen wurde, indem ich den falschen Typ benutzte (vor ein paar Jahren), ist mit großen Mengen:
- £ 520,532.52 - 8 Ziffern
- £ 1.323.523,12 - 9 Ziffern
Du bist bei 1 Million für einen Float ausgelaufen.
Ein 15-stelliger Geldwert:
9 Billionen mit einem Doppel. Aber mit Division und Vergleichen ist es komplizierter (ich bin definitiv kein Experte in Fließkomma und irrationalen Zahlen - Siehe Marcs Argument). Das Mischen von Dezimalzahlen und Doppeln verursacht Probleme:
Eine mathematische oder Vergleichsoperation
das verwendet eine Gleitkommazahl
möglicherweise nicht das gleiche Ergebnis, wenn a
Dezimalzahl wird verwendet, weil die
Floating-Point-Nummer möglicherweise nicht
genau die ungefähre Dezimalzahl
Nummer.
Wann sollte ich double anstelle von decimal verwenden?hat einige ähnliche und tiefere Antworten.
Verwenden double
Anstatt von decimal
für monetäre Anwendungen ist eine Mikro-Optimierung - das ist die einfachste Art, wie ich es betrachte.
34
2018-02-04 12:06
Dezimal ist für genaue Werte. Double ist für ungefähre Werte.
USD: $12,345.67 USD (Decimal)
CAD: $13,617.27 (Decimal)
Exchange Rate: 1.102932 (Double)
32
2017-07-22 14:59
Für Geld: decimal
. Es kostet etwas mehr Speicher, hat aber keine Rundungsprobleme double
hat manchmal.
23
2017-07-22 14:39
Bestimmt Verwenden Sie Integer-Typen für Ihre Geldberechnungen. Dies kann nicht genug betont werden, da es auf den ersten Blick scheint, dass ein Gleitkommatyp ausreichend ist.
Hier ein Beispiel im Python-Code:
>>> amount = float(100.00) # one hundred dollars
>>> print amount
100.0
>>> new_amount = amount + 1
>>> print new_amount
101.0
>>> print new_amount - amount
>>> 1.0
sieht ziemlich normal aus.
Versuchen Sie es jetzt erneut mit 10 ^ 20 Simbabwe-Dollar
>>> amount = float(1e20)
>>> print amount
1e+20
>>> new_amount = amount + 1
>>> print new_amount
1e+20
>>> print new_amount-amount
0.0
Wie Sie sehen können, ist der Dollar verschwunden.
Wenn Sie den Integer-Typ verwenden, funktioniert es gut:
>>> amount = int(1e20)
>>> print amount
100000000000000000000
>>> new_amount = amount + 1
>>> print new_amount
100000000000000000001
>>> print new_amount - amount
1
6
2017-07-22 14:56
Ich denke, dass der Hauptunterschied neben der Bitbreite ist, dass der Dezimalwert den Exponenten base 10 und double 2 hat
http://software-product-development.blogspot.com/2008/07/net-double-vs-decimal.html
4
2017-11-26 13:23