C # десятичное равенство типов - PullRequest
2 голосов
/ 20 сентября 2011

Может ли сравнение равенства для десятичных типов C # работать с большей вероятностью, чем мы интуитивно ожидаем, чем другие типы с плавающей запятой?

Ответы [ 2 ]

5 голосов
/ 20 сентября 2011

Полагаю, это зависит от вашей интуиции.Я предположил бы, что некоторые люди будут думать о результате деления 1 на 3 как дробь 1/3, а другие будут думать больше по принципу «О, 1, деленное на 3, не может быть представлено как десятичное число, мыПридется решить, сколько цифр оставить, давайте перейдем к 0,333 ".

Если вы думаете по-прежнему, Decimal не очень вам поможет, но если вы думаете по-другому,и явно о округлении при необходимости, более вероятно, что операции, которые «интуитивно» не подвержены ошибкам округления в десятичном виде, например деление на 10, будут вести себя так, как вы ожидаете.Это более интуитивно понятно большинству людей, чем поведение двоичного типа с плавающей запятой, где степени 2 ведут себя хорошо, а степени 10 - нет.

4 голосов
/ 20 сентября 2011

В основном нет.Тип Decimal просто представляет специализированный вид числа с плавающей запятой, предназначенный для уменьшения ошибки округления , в частности, в системе base 10 .То есть, внутреннее представление Decimal фактически находится в базе 10 (динарий), а не в обычном двоичном коде.Следовательно, это довольно более подходящий тип для денежных расчетов - хотя, конечно, он не ограничивается такими приложениями.

Со страницы MSDN для структуры:

Тип десятичного значения представляет десятичные числа в диапазоне от положительных 79,228,162,514,264,337,593,543,950,335 до отрицательных 79,228,162,514,264,337,593,543,950,335.Тип десятичного значения подходит для финансовых расчетов, требующих большого количества значащих целых и дробных цифр и без ошибок округления.Тип Decimal не устраняет необходимость округления.Скорее, это минимизирует ошибки из-за округления.Например, следующий код дает результат 0,99999999999999999999999999999, а не 1.

Десятичное число - это значение с плавающей запятой, которое состоит из знака, числового значения, где каждая цифра в диапазоне значений от 0 до 9и масштабный коэффициент, который указывает положение плавающей десятичной точки, которая разделяет целую и дробную части числового значения.

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