В С#, какой тип данных я должен использовать для представления денежных сумм? Десятичная дробь? Поплавок? Удвоить? Я хочу принять во внимание: точность, округление и т.д.
Какой тип данных я должен использовать для представления денег на С#?
Ответ 1
Используйте System.Decimal
:
Тип десятичного значения представляет десятичные числа от положительных 79.228.162.514.264.337.593.543.950.335 к отрицательному 79.228.162.514.264.337.593.543.950.335. Тип десятичного значения подходит для финансовых расчетов, требующих большое количество значимых интегральных и дробные цифры и без округления ошибки. Десятичный тип не устранить необходимость округления. Скорее, это сводит к минимуму ошибки из-за округления.
Ни System.Single
(float
), ни System.Double
(double
) достаточно точный, способный отображать числа с высокой точностью с плавающей запятой без ошибок округления.
Ответ 2
Используйте десятичную дробь и деньги в БД, если вы используете SQL.
Ответ 3
Decimal - это тот, который вы хотите.
Ответ 4
В С# тип Decimal фактически представляет собой структуру с перегруженными функциями для всех операций математики и сравнения в базе 10, поэтому она будет иметь менее значительные ошибки округления. Поплавок (и двойной), с другой стороны, сродни научной нотации в двоичном формате. В результате, десятичные типы более точны, когда вы знаете нужную вам точность.
Запустите это, чтобы увидеть разницу в точности 2:
using System;
using System.Collections.Generic;
using System.Text;
namespace FloatVsDecimal
{
class Program
{
static void Main(string[] args)
{
Decimal _decimal = 1.0m;
float _float = 1.0f;
for (int _i = 0; _i < 5; _i++)
{
Console.WriteLine("float: {0}, decimal: {1}",
_float.ToString("e10"),
_decimal.ToString("e10"));
_decimal += 0.1m;
_float += 0.1f;
}
Console.ReadKey();
}
}
}
Ответ 5
Рассмотрим использование Тип денег для среды CLR. Это настраиваемый тип значения (struct), который также поддерживает валюты и обрабатывает проблемы округления.
Ответ 6
В С# Вы должны взять " Десятичный" для представления денежных сумм.