Is het goed om een ​​decimaal te vermenigvuldigen met een int?

Ik ben een newbie voor C# en .NET, dus ik verontschuldig me als dit een te simpele vraag is.

Ik heb een decimale variabele decVar . Ik moet het vermenigvuldigen met een integer variabele intVar . Ik wil dat het resultaat decimaal is. Dus moet ik de integer-variabele declareren als int of als decimal ?

Met deze code,

decimal decVar = 0.1m;
decimal decRes = decVar * intVar;

moet ik het zo verklaren:

int intVar = 3;

of zoals dit:

decimal intVar = 3;

?

Dit is een financiële berekening, dus ik wil dat het resultaat precies 0.3 is.

upd : Code updated (thanks to Jon)

19

3 antwoord

Het maakt niet uit - de int wordt toch geconverteerd naar decimal : er is geen operator * (decimal, int) , alleen * (int, int) en * (decimal, decimal) . (En andere types, natuurlijk.)

Nu kan decimal niet impliciet worden geconverteerd naar int , maar de omgekeerde conversie is geldig - dus dat is wat de compiler doet.

U moet echter de declaratie van decVar wijzigen omdat momenteel aan de rechterkant van de toewijzingsoperator een dubbele waarde staat, geen decimale waarde. Je bedoelt 0.1m. U wilt ook puntkomma's :)

29
toegevoegd

Het maakt geen verschil. Aangezien een argument van de vermenigvuldiging decimaal is, wordt de andere ook geconverteerd naar decimaal (als dit nog niet het geval is).

Deze conversie is altijd veilig :

Overwegingen bij conversie

     

Dit type biedt methoden voor het converteren van decimale waarden naar en van   SByte, Int16, Int32, Int64, Byte, UInt16, UInt32 en UInt64.   Conversies van deze integrale typen naar decimalen worden groter   conversies die nooit informatie verliezen of uitzonderingen veroorzaken.

8
toegevoegd

Het maakt niet uit of u het declareert als int of decimal . Het wordt voor de berekening naar decimaal gegoten.

Ook kunt u nooit drijfpuntnauwkeurigheid garanderen omdat er getallen zijn die niet exact in binair kunnen worden weergegeven. U moet andere voorzorgsmaatregelen nemen om afrondingsfouten te minimaliseren.

1
toegevoegd
Er zijn cijfers die ook niet exact in decimalen kunnen worden weergegeven. Bijvoorbeeld, 1m/5m is niet onnauwkeurig, maar 1d/5d is dat wel.
toegevoegd de auteur phoog, de bron
Upstemming voor het wijzen op problemen met binaire weergave van drijvers.
toegevoegd de auteur Perception, de bron