У меня есть функция обрезания десятичных разрядов двойного типа данных vaiable, который указан ниже
public double GetTruncate(double tobeTruncated, int divideFactor)
{
if (divideFactor == 0)
return Math.Truncate((double)tobeTruncated);
else
{
tobeTruncated = tobeTruncated * divideFactor;
tobeTruncated = Math.Truncate((double)tobeTruncated);
tobeTruncated = tobeTruncated / divideFactor;
}
return tobeTruncated;
}
Пример: tobeTruncated = 35,66 коэффициент деления = 100
При выполнении вышеупомянутой строки я получаю значение для tobeTruncated как 3565.9999999999995 вместо 3566 . Я не знаю причину.
Когда я изменил двойную переменную на десятичную, я получил правильный ответ . Модифицированная функция с правильным ответом приведена ниже:
public double GetTruncate(double tobeTruncated, int divideFactor)
{
decimal nTempData = (decimal)tobeTruncated;
if (divideFactor == 0)
return (double)Math.Truncate((decimal)nTempData);
else
{
nTempData = nTempData * divideFactor;
nTempData = Math.Truncate((decimal)nTempData);
nTempData = nTempData / (decimal)divideFactor;
}
return (double)nTempData;
}
Кто-нибудь может объяснить причину этого?