50

Вопрос по c# – Какой тип данных я должен использовать, чтобы представлять деньги в C #?

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

6ответов

73

использованиеSystem.Decimal:

The Decimal value type represents decimal numbers ranging from positive 79,228,162,514,264,337,593,543,950,335 to negative 79,228,162,514,264,337,593,543,950,335. The Decimal value type is appropriate for financial calculations requiring large numbers of significant integral and fractional digits and no round-off errors. The Decimal type does not eliminate the need for rounding. Rather, it minimizes errors due to rounding.

ниSystem.Single (float) ниSystem.Double (double) являютсяprecise enough способен представлять высокоточные числа с плавающей запятой без ошибок округления.

0

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

4

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

3

Десятичный это тот, который вы хотите.

2

В 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

В C # Вы должны взять & quot;Decimal& Quot; представлять денежные суммы.

RelatedQuestions