Vraag Verschil tussen decimaal, zweven en verdubbelen in .NET?


Wat is het verschil tussen decimal, float en double in .NET?

Wanneer zou iemand een van deze gebruiken?


1772
2018-03-06 11:31


oorsprong


antwoorden:


float en double zijn drijvend binair soorten punten. Met andere woorden, ze vertegenwoordigen een aantal zoals dit:

10001.10010110011

Het binaire getal en de locatie van het binaire punt zijn allebei gecodeerd binnen de waarde.

decimal is een drijvend decimale punttype. Met andere woorden, ze vertegenwoordigen een aantal zoals dit:

12345.65789

Nogmaals, het aantal en de locatie van de decimale punten zijn allebei gecodeerd binnen de waarde - dat is wat maakt decimal nog steeds een floating point type in plaats van een fixed point type.

Het belangrijkste om op te merken is dat mensen worden gebruikt om niet-gehele getallen in een decimale vorm weer te geven, en exacte resultaten verwachten in decimale representaties; niet alle decimale getallen worden exact weergegeven in binair zwevend punt - bijvoorbeeld 0,1 - dus als u een binaire zwevende-kommawaarde gebruikt, krijgt u eigenlijk een schatting van 0,1. Je krijgt nog steeds een schatting bij het gebruik van een zwevende komma - het resultaat van delen 1 bij 3 kan bijvoorbeeld niet exact worden weergegeven.

Wat te gebruiken wanneer:

  • Voor waarden die "van nature exacte decimalen" zijn, is het goed om te gebruiken decimal. Dit is meestal geschikt voor elk concept dat door de mens is uitgevonden: financiële waarden zijn het meest voor de hand liggende voorbeeld, maar er zijn ook andere. Denk bijvoorbeeld aan de score voor duikers of schaatsers.

  • Voor waarden die meer artefacten van de natuur zijn die niet echt kunnen worden gemeten precies hoe dan ook, float/double zijn meer geschikt. Wetenschappelijke gegevens zouden bijvoorbeeld gewoonlijk in deze vorm worden weergegeven. Hier zullen de oorspronkelijke waarden om te beginnen niet "decimaal nauwkeurig" zijn, dus het is niet belangrijk dat de verwachte resultaten de "decimale nauwkeurigheid" behouden. Zwevende binaire punttypen zijn veel sneller om mee te werken dan decimalen.


1963
2018-03-06 11:56



Precisie is het grootste verschil.

Vlotter - 7 cijfers (32 bit)

Dubbele-15-16 cijfers (64 bit)

Decimale -28-29 significante cijfers (128 bit)

Decimalen hebben een veel hogere precisie en worden meestal gebruikt binnen financiële applicaties die een hoge mate van nauwkeurigheid vereisen. Decimalen zijn veel trager (tot 20X keer in sommige tests) dan een double / float.

Decimals en Floats / Doubles kunnen niet worden vergeleken zonder een cast terwijl Floats en Doubles dat wel kunnen. Decimalen staan ​​ook codering of volgnullen toe.

float flt = 1F/3;
double dbl = 1D/3;
decimal dcm = 1M/3;
Console.WriteLine("float: {0} double: {1} decimal: {2}", flt, dbl, dcm);

Resultaat :

float: 0.3333333  
double: 0.333333333333333  
decimal: 0.3333333333333333333333333333

894
2018-03-06 11:33



De decimale structuur is strikt afgestemd op financiële berekeningen die nauwkeurigheid vereisen, die betrekkelijk intolerant zijn voor afronding. Decimalen zijn om verschillende redenen niet toereikend voor wetenschappelijke toepassingen:

  • Een zeker verlies van precisie is acceptabel in veel wetenschappelijke berekeningen vanwege de praktische limieten van het fysieke probleem of artefact dat wordt gemeten. Verlies van precisie is niet acceptabel in de financiële wereld.
  • Decimaal is veel (veel) langzamer dan float en double voor de meeste bewerkingen, voornamelijk omdat drijvende-kommabewerkingen in binary worden uitgevoerd, terwijl Decimal-spul wordt gedaan in base 10 (dat wil zeggen dobbers en doubles worden afgehandeld door de FPU-hardware, zoals MMX / SSE , terwijl decimalen in software worden berekend).
  • Decimaal heeft een onaanvaardbaar kleiner waardenbereik dan het dubbele, ondanks het feit dat het meer precisiecijfers ondersteunt. Daarom kan Decimaal niet worden gebruikt om veel wetenschappelijke waarden te vertegenwoordigen.

65
2018-04-13 13:55



enter image description here

voor meer informatie kun je naar de bron van deze foto gaan:

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/921a8ffc-9829-4145-bdc9-a96c1ec174a5


54
2018-06-07 12:50



float 7 cijfers van precisie

double heeft ongeveer 15 cijfers van precisie

decimal heeft ongeveer 28 cijfers van precisie

Als je een betere nauwkeurigheid nodig hebt, gebruik dan dubbel in plaats van float. In moderne CPU's hebben beide gegevenstypes bijna dezelfde prestaties. Het enige voordeel van het gebruik van float is dat ze minder ruimte innemen. Praktisch is alleen van belang als je er veel hebt.

Ik vond dit interessant. Wat elke computerwetenschap moet weten over drijvende-komma aritmetica


39
2017-08-29 00:06



Niemand heeft dat genoemd

In standaardinstellingen zullen Floats (System.Single) en doubles (System.Double) nooit gebruiken   overflow controle terwijl Decimal (System.Decimal) altijd zal gebruiken   overloopcontrole.

ik bedoel

decimal myNumber = decimal.MaxValue;
myNumber += 1;

worpen OverflowException.

Maar deze doen niet:

float myNumber = float.MaxValue;
myNumber += 1;

&

double myNumber = double.MaxValue;
myNumber += 1;

28
2018-01-02 13:12



  1. Double en float kunnen worden gedeeld door geheel getal nul zonder uitzondering op zowel compilatie als uitvoeringstijd.
  2. Decimaal kan niet worden gedeeld door geheel getal nul. Compilatie zal altijd falen als je dat doet.

24
2017-07-29 07:21