int vs decimal для обработки небольшого количества денег - PullRequest
1 голос
/ 26 апреля 2020

Для представления денег я знаю, что лучше использовать тип данных C# decimal для double или float, однако, если вы работаете с денежными суммами меньше миллионов, int не будет лучший вариант?

Обладает ли decimal идеальной точностью вычислений, т.е. не страдает от Почему компьютеры плохо набирают цифры ? Если все еще некоторая возможность совершить ошибку вычисления, не лучше ли использовать int и просто отображать значение с десятичным разделителем?

Ответы [ 3 ]

2 голосов
/ 26 апреля 2020

Суммы, с которыми вы работаете, «менее миллиона» в вашем примере, не проблема. Это то, что вы хотите сделать со значениями и насколько вам нужна точность. И обработка этих чисел как целых чисел не очень помогает - это просто возлагает на вас ответственность, чтобы следить за точностью. Если точность имеет решающее значение, то есть библиотеки, чтобы помочь; Пакеты BigInteger и BigDecimal доступны на разных языках, и есть библиотеки, которые не ограничивают точность В Википедии есть список Важный вывод заключается в том, чтобы знать ваше проблемное пространство и насколько вам нужна точность. Для многих вещей встроенная точность хороша, когда у вас нет других вариантов.

1 голос
/ 26 апреля 2020

Как сказал li223, целое число не позволит вам сохранять значения с десятичными знаками - а большинство валют допускают десятичные значения.

Я бы посоветовал выбрать количество десятичных падежей для работы, и избегайте проблемы, на которую вы ссылались («Почему компьютеры плохо работают с числами»). Я работаю с вызовом, и мы используем 8 десятичных знаков, и пока отлично работает со всеми валютами.

0 голосов
/ 26 апреля 2020

Основная причина использования десятичного числа над целым в этом случае состоит в том, что десятичное число, ну, в общем, допускает десятичные разряды IE: £ 2,50 можно правильно представить как 2,5 с десятичной дробью. Принимая во внимание, что если вы использовали целое число, вы не можете представить десятичные точки. Это хорошо, если, как Джон упоминает в своем комментарии, вы представляете валюту, подобную японской иене, которая не имеет десятичных дробей.

Что касается точности десятичной дроби, то она по-прежнему страдает от "Почему компьютеры плохо работают с числами" см. ответ на этот вопрос для получения дополнительной информации.

...