Какой тип данных лучше всего использовать для денег в c#?



какой тип данных лучше всего использовать для денег в c#?

642   9  

9 ответов:

Как это описано в decimal как:

ключевое слово decimal указывает на 128-битный тип данных. По сравнению с типы с плавающей точкой, десятичной тип имеет больше точности и меньший диапазон, что делает его подходит для финансовых и денежно проведенные расчеты.

вы можете использовать десятичное число следующим образом:

decimal myMoney = 300.5m;

использовать Money pattern С Шаблоны архитектуры корпоративных приложений; укажите сумму как десятичную, а валюту как перечисление.

десятичное число. Если вы выбираете double, вы оставляете себя открытым для ошибок округления

decimal имеет меньший диапазон, но большую точность - так что вы не потеряете все эти копейки с течением времени!

все подробности здесь:

http://msdn.microsoft.com/en-us/library/364x0z75.aspx

согласитесь с моделью денег: обработка валют просто слишком громоздка, когда вы используете десятичные числа.

Если вы создадите класс валюты, вы можете поместить туда всю логику, относящуюся к деньгам, включая правильный метод 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

    Ничего не найдено.