Ці можна памножыць дзесятковы з міжнар?

Я пачатковец у C# і .NET, так што я apoligize, калі гэта занадта простае пытанне.

У мяне ёсць дзесятковы пераменная decVar . Мне трэба памножыць яго з цэлай зменнай IntVar . Мне патрэбны вынік, каб быць дзесятковы . Так што я павінен затым аб'явіць цэлалікавых зменную як Int ці як дзесятковага ?

Маючы гэты код,

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

я павінен аб'явіць яго як гэта:

int intVar = 3;

ці як гэта:

decimal intVar = 3;

?

Гэта фінансавы разлік, таму мне патрэбен вынік, каб быць сапраўды 0,3 .

upd : Code updated (thanks to Jon)

19

3 адказы

Гэта не мае вялікага значэння - Int будзе ператвораны ў </дзесятковага кода> у любым выпадку: няма * (дзесятковы, цэлае) аператар, проста * (ідэалам, цэлае) і * (дзесятковы, дзесятковы) . (І іншыя тыпы, вядома.)

Цяпер дзесятковы не можа быць няяўна пераўтвораны ў Int , але адваротнае пераўтварэнне сапраўды - так гэта тое, што робіць кампілятар.

Тым не менш, вам неабходна змяніць дэкларацыю decVar у цяперашні час правая частка аператара прысвойвання з'яўляецца падвойным, а не дзесятковы. Вы маеце на ўвазе 0,1М. Вы хочаце полу-калоны таксама :)

29
дададзена

Ён не робіць розніцы. Бо адзін аргумент множання дзесятковы , іншы будзе ператвораны ў </дзесятковага кода> а (калі ён ужо не адзін).

Гэта пераўтварэнне заўсёды бяспечна :

<�Р> Пытанні <�моцны> Канверсія      <�Р> Гэтага тыпу забяспечвае метады, якія пераўтвораць значэння дзесятковых і з   SByte, Int16, Int32, Int64, Byte, UInt16, UInt32 і UInt64.   Пераўтварэння з гэтых інтэгральных тыпаў у дзесятковы Пашыраюцца   пераўтварэнні, якія ніколі не губляюць інфармацыю або кідаць выключэння.
8
дададзена

Не мае значэння, аб'явіць Ці вы яго як Int або </дзесятковага кода>. Ён атрымае адценне </дзесятковага кода> для разліку.

Акрамя таго, вы ніколі не можаце гарантаваць дакладнасць вылічэнняў з якая плавае кропкай, таму што ёсць колькасці, якія не могуць быць прадстаўлены дакладна ў двайковым кодзе. Вы павінны будзеце прыняць іншыя меры засцярогі, каб звесці да мінімуму памылкі акруглення.

1
дададзена
Ёсць нумары, якія не могуць быць прадстаўлены дакладна ў дзесятковай сістэме злічэння, таксама. Напрыклад, 1й/5й ня недакладны, але 1 д/5d ёсць.
дададзена аўтар phoog, крыніца
Upvoting для ўказанні на праблемы з двайковым прадстаўленнем паплаўкоў.
дададзена аўтар Perception, крыніца