Код: Выделить всё
static void Main(string[] args)
{
int d0 = (int)(2.300000000000001 * 100D);
int d1 = (int)(2.3000 * 100D);
Console.WriteLine(d0);
Console.WriteLine(d1);
return;
}
Ожидаемый результат для обоих d0 и d1 должны быть 230. Однако, хотя d0 правильно оценивает 230, d1 неожиданно дает 229.
Я понимаю, что арифметика с плавающей запятой иногда может вносить небольшие ошибки из-за ограничений точности. , но я не могу объяснить, почему d1 дает 229. Может ли кто-нибудь помочь разъяснить, почему это может происходить и как решить эту проблему, чтобы получить ожидаемый результат 230 для d1?

Подробнее здесь: https://stackoverflow.com/questions/784 ... ypecasting