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