Какой тип данных я должен использовать, чтобы представлять деньги в C #? - PullRequest
51 голосов
/ 17 июня 2009

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

Ответы [ 6 ]

75 голосов
/ 17 июня 2009

Использование 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) не являются достаточно точными способными представлять высокоточную плавающую точку числа без ошибок округления.

4 голосов
/ 17 июня 2009

Используйте десятичные числа и деньги в БД, если вы используете SQL.

3 голосов
/ 17 июня 2009

Десятичное число это то, что вы хотите.

2 голосов
/ 17 июня 2009

В C # тип 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();
        }
    }
}
0 голосов
/ 26 апреля 2016

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

0 голосов
/ 19 декабря 2014

Рассмотрите возможность использования Тип денег для CLR . Это пользовательский тип значения (структура), который также поддерживает валюты и обрабатывает проблемы округления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...