Да, decimal
предназначен именно для этого.
Однако учтите, что диапазон десятичного типа меньше двойного. Это значение double может содержать большее значение, но оно теряет точность. Или, как указано в MSDN:
Десятичное ключевое слово обозначает 128-бит
тип данных. По сравнению с плавающей точкой
типы, десятичный тип имеет больший
точность и меньший диапазон, который
делает его пригодным для финансовых и
денежные расчеты. Приблизительный
диапазон и точность для десятичного числа
тип показан в следующей таблице.
Основное различие между decimal
и double
состоит в том, что decimal
является фиксированной точкой, а double
является плавающей точкой . Это означает, что десятичное число хранит точное значение, тогда как double
представляет значение, представленное дробью, и является менее точным. decimal
составляет 128 бит, поэтому для его хранения требуется двойной пробел. Расчеты на decimal
также медленнее (мера!).
Если вам нужна еще большая точность, тогда из .NET 4 можно использовать BigInteger
(вам нужно будет обрабатывать десятичные точки самостоятельно). Здесь вы должны знать, что BigInteger является неизменяемым, поэтому любая арифметическая операция над ним создаст новый экземпляр - если числа большие, это может ухудшить производительность.
Я предлагаю вам посмотреть, насколько точно вы должны быть. Возможно, ваш алгоритм может работать с нормализованными значениями, которые могут быть меньше? Если производительность является проблемой, один из встроенных типов с плавающей запятой, скорее всего, будет быстрее.