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