Подтвердить что ты не робот

Какой тип данных я должен использовать для представления денег на С#?

В С#, какой тип данных я должен использовать для представления денежных сумм? Десятичная дробь? Поплавок? Удвоить? Я хочу принять во внимание: точность, округление и т.д.

4b9b3361

Ответ 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

В С# Вы должны взять " Десятичный" для представления денежных сумм.