12 - Currency Converter - 2 решения без излишни проверки
Здравейте колеги, зная че задачите от домашната са направени така, че учещите да се тренират върху материала, който се преподава вмомента, но желая да споделя 2 елегантни, кратки и прости решения на задачата ( и най-вече мързеливи :D ) , въпреки че включват неща, които скоро няма да се изучават. Все пак може някой да се запали и да човърка в теми за по-напреднали с цел улеснение на решаване на бъдещи проблеми.
http://pastebin.com/pTxLNBQS - Без If конструкции, само 4 случая на case, като switch-a е изнесен в метод и затова няма нужда да повтаряме код, а само да приложим метода върху двата стринга, които прочитаме.
http://pastebin.com/uGRfhgKK - Тук менторите ме насочиха още в Събота, да ползвам dictionary, понеже нямам желание да го правя с if / switch конструкции и чак в нас успях да го измисля, с малко помощ от google. Накратко с dictionary имаме по всяко време key / value и можем да ги използваме от сорта на : double result = (currencies[firstCurrency] / currencies[secondCurrency]) * amount;
Дано на някой са му били интересни решенията и да се запали да чете за някои неща, които ще се изучават напред.
Междудругото от лекция 03-Simple-Conditional-Statements има няколко задачки, които се решават с един от тези начини, без многото if/ switch проверки, решението на тях мисля, че няма нужда да го пускам, то е същото като този код, само трябва да се променят стойностите евентуално.
Пускайте и ваши решения на подобни задачи, всмисъл заспиващи на 100/100 с някакви неща, които не са изучавани в курса.
Поздрави.
Така е, правилна забележка.
Защо? И защо това не бе споменато в съответната лекция или която и да е предходна, преди това домашно? Очевидно и с double всичко е наред. Дори decimal няма ли да доведе до неточности?
Реални типове с десетична точност
В C# се поддържа т. нар. десетична аритметика с плаваща запетая (decimal floating-point arithmetic), при която числата се представят в десетична, а не в двоична бройна система и така не се губи точност при записване на десетично число в съответния тип с плаваща запетая.
Типът данни за реални числа с десетична точност в C# е 128-битовият тип decimal. Той има точност от 28 до 29 десетични знака. Минималната му стойност е -7.9×1028, а максималната е +7.9×1028. Стойността му по подразбиране е 0.0м или 0.0М. Символът 'm' накрая указва изрично, че числото е от тип decimal (защото по подразбиране всички реални числа са от тип double). Най-близките до 0 числа, които могат да бъдат записани в decimal са ±1.0 × 10-28. Видно е, че decimal не може да съхранява много големи положителни и отрицателни числа (например със стотици цифри), нито стойности много близки до 0. За сметка на това този тип почти не прави грешки при финансови пресмятания, защото представя числата като сума от степени на числото 10, при което загубите от закръгляния са много по-малки, отколкото когато се използва двоично представяне. Реалните числа от тип decimal са изключително удобни за пресмятания с пари – изчисляване на приходи, задължения, данъци, лихви и т.н.