Десятичный — наиболее разумный тип для денежных сумм.
Decimal — это числовой тип с основанием 10 с плавающей запятой с точностью до 28 и более десятичных цифр. При использовании Decimal у вас будет меньше сюрпризов, чем при использовании типа Double с основанием 2.
Double использует вдвое меньше памяти, чем Decimal, и Double будет намного быстрее из-за аппаратного обеспечения ЦП для многих распространенных операций с плавающей запятой, но он не может точно представлять большинство дробей с основанием 10 (например, 1,05) и имеет менее точные 15+ десятичных цифр точность. Double имеет преимущество в большем диапазоне (он может представлять большие и меньшие числа), что может пригодиться для некоторых вычислений, особенно для некоторых статистических вычислений.
Один ответ на ваш вопрос гласит, что Decimal - это фиксированная точка с 4 десятичными цифрами. Это не тот случай. Если вы сомневаетесь в этом, обратите внимание, что следующая строка кода дает 0,0000000001:
Console.WriteLine("number={0}", 1m / 10000000000m);
Сказав все это, интересно отметить, что наиболее широко используемая в мире программа для работы с денежными суммами, Microsoft Excel, использует двойные числа. Конечно, им приходится прыгать через множество обручей, чтобы заставить его работать хорошо, и это все еще оставляет желать лучшего. Попробуйте эти две формулы в Excel:
Первый дает 0, второй дает ~-2,77e-17. Excel на самом деле массирует числа при сложении и вычитании чисел в некоторых случаях, но не во всех случаях.
person
Joe Erickson
schedule
01.03.2009