2008-09-30 3 views

ответ

11

Вы должны использовать Decimal тип данных ..

Десятичный ключевое слово указывает тип данных 128-битный. По сравнению с типами с плавающей запятой десятичный тип имеет более высокую точность и меньший диапазон, что делает его подходящим для финансовых и денежных расчетов.

+5

Вы знаете, это не «более точно», что очень важно, это тип точности. Десятичное число основано на 10-базовом масштабе и всегда будет точно представлять десятичное число в пределах его диапазона. Однако типы поплавков основаны на двоичной шкале и могут описывать фракцию, которая не является частью базы 10 – nedruod 2008-09-30 00:53:56

2

Это может быть возможным с помощью отражения, но причины, что это есть для FromOACurrency() и ToOACurrency() статические методы на System.Decimal, что для convering от/до Ole Automation Currency типа, который Basic 6 использует визуальные.

7

Использование десятичной. Все функции, которые предоставляет валюта, являются статическими методами для Decimal, FromOACurrency и ToOACurrency.

-3

Вы не можете использовать Decimal для валюты. Позже вы столкнетесь с большими проблемами, когда разделите. Скажем, если вы разделили 1 доллар на 3, что составляет 1/3 = 0,33 (округлено), но 3 x 0,33 = 0,99! = 1. Это может быть небольшим, но когда вы делаете это в бухгалтерии и складываете свои листы, это будет огромная фигура. Кроме того, по умолчанию поведение округления вверх/вниз по умолчанию в .Net (не уверенное в других языках программирования) заключается в следующем четном значении, также называемом округлением банкиров, для минимизации ошибок в учете по сравнению с нашим обычным «человеческим» способом округления.

Прочтите эту страницу для более четкого объяснения и специального класса для обработки денег. Code Project : A Money type for the CLR

Также о Rounding

+6

-1, потому что этот ответ вводит в заблуждение. Decimal - это тип данных, специально созданный для правильного хранения денег. Выполнение вычислений является другой проблемой и зависит от контекста: если вы хотите разделить деньги на равные доли без потери денег, вы должны использовать выделенный класс/метод/класс, который делает это правильно для него (см. Http: // martinfowler .com/eaaCatalog/money.html). Связанная статья о проекте кода основана на некоторых недопустимых предположениях: не понимая, что Decimal хранится в качестве базы 10, тест, который также преуспевает с Decimal, но предполагает, что они потерпят неудачу. – 2014-06-12 12:00:43

Смежные вопросы