9 ответов:
Как это описано в decimal как:
ключевое слово decimal указывает на 128-битный тип данных. По сравнению с типы с плавающей точкой, десятичной тип имеет больше точности и меньший диапазон, что делает его подходит для финансовых и денежно проведенные расчеты.
вы можете использовать десятичное число следующим образом:
decimal myMoney = 300.5m;
использовать Money pattern С Шаблоны архитектуры корпоративных приложений; укажите сумму как десятичную, а валюту как перечисление.
decimal имеет меньший диапазон, но большую точность - так что вы не потеряете все эти копейки с течением времени!
все подробности здесь:
согласитесь с моделью денег: обработка валют просто слишком громоздка, когда вы используете десятичные числа.
Если вы создадите класс валюты, вы можете поместить туда всю логику, относящуюся к деньгам, включая правильный метод ToString () -, больший контроль значений синтаксического анализа и лучший контроль подразделений.
кроме того, с валютным классом нет никаких шансов непреднамеренно смешивать деньги с другими данными.
другой вариант (особенно если вы катите свой собственный класс) заключается в использовании int или int64 и обозначении нижних четырех цифр (или, возможно, даже 2) как "справа от десятичной точки". Так что "по краям" вам понадобится несколько "* 10000" на пути внутрь и некоторые "/ 10000" на выходе. Это механизм хранения, используемый Microsoft SQL Server, см. http://msdn.microsoft.com/en-au/library/ms179882.aspx
уникальность этого заключается в том, что все ваше суммирование может быть сделано использование (быстрой) целочисленной арифметики.
создайте свой собственный класс. Это кажется странным, но тип .Net недостаточен для покрытия разных валют.
большинство приложений, с которыми я работал, используют
decimalпредставлять деньги. Это основано на предположении, что приложение никогда не будет связано с более чем одной валютой.это предположение может быть основано на другом предположении, что приложение никогда не будет использоваться в других странах с разными валютами. Я видел случаи, когда это оказывалось ложным.
теперь это предположение оспаривается по-новому: новые валюты, такие как биткойн становятся все более распространенными, и они не являются специфическими для какой-либо страны. Вполне реально, что приложение, используемое только в одной стране, может по-прежнему нуждаться в поддержке нескольких валют.
некоторые люди скажут, что создание или даже использование типа только за деньги-это "золотое покрытие" или добавление дополнительной сложности за пределы известных требований. Я категорически не согласен. Тем более вездесущее понятие находится в пределах вашего домена, тем более важно, чтобы сделать разумные усилия, чтобы использовать правильный абстракция впереди. Если вы хотите увидеть сложность, попробуйте работать в приложении, которое раньше использовало
decimalи вот ещеCurrencyнедвижимость рядом с каждымdecimalсобственность.если вы используете неправильную абстракцию спереди, замена ее позже будет в сто раз больше работы. Это означает потенциальное введение дефектов в существующий код, и лучшая часть заключается в том, что эти дефекты, вероятно, будут включать в себя суммы денег, транзакции с деньгами или просто что-либо с помощью деньги.
и это не так сложно использовать что-то другое, чем десятичное. Google "nuget money type" и вы увидите, что многие разработчики создали такие абстракции (включая меня.- Это просто. Это так же просто, как с помощью
DateTimeвместо хранения даты вstring.
Comments