M. Daban Ответов: 3

Как получить точное значение путем деления десятичных дробей


У меня есть этот код
decimal total = 2m;
decimal discount = 0.2m;
decimal disPercent = discount / total;


значение дисперсности должно быть 0,0909090909090909
но я получаю 0.1
что я должен сделать, чтобы получить 0.0909090909090909?


обратите внимание, что значения, например, я всегда получаю их из базы данных в виде десятичных значений

Что я уже пробовал:

decimal total = 2m;
decimal discount = 0.2m;
decimal disPercent = decimal.Divide(discount, total);

не работать

3 Ответов

Рейтинг:
25

OriginalGriff

Почему вы думаете, что 0.2 / 2.0 - это 0.0909090909?..
Математика, которой меня учили в детстве, говорит о другом:

0.2 / 2.0 == 2.0 / 20.0 == 1.0 / 10.0 == 0.1


M. Daban

о мой плохой, извините, что я сделал все свои расчеты на 2.2 / 0.2, а не на 2/0. 2
это болезнь :(

OriginalGriff

Я хорошо знаю это чувство! :смеяться:

Рейтинг:
2

#realJSOP

Деление десятичных дробей уже возвращает точное значение (более точное, чем любая математика со значениями с плавающей запятой).


Рейтинг:
1

Midi_Mick

0.2 / 2 на самом деле равно 0.1. я думаю, что ваш вопрос, возможно, должен был включать 0.2 в общую сумму, поэтому 2.0 оплачивается, 0.2-скидка, а 2.2-общая сумма. Затем, если вы разделите 0,2 на 2,2, вы получите ожидаемый результат 0,0909 повторения (фактически 1/11).