Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: C#: получить отдельно целую и десятичную части  (Прочитано 34773 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
TomKa_t
Гость
« : 10-09-2005 18:42 » 

При попытке отделить целую и десятичную части числа, обнаружила странную вещь. Код:

double dec = Convert.ToDouble(5.7);
double whole = Math.Floor(dec);
double value = dec - whole;

выдает значение value = 0.70000000000000018, вместо ожидаемого value = 0.7

учитывая это, получается что у меня два вопроса:
1. Как получить дробную часть в отдельности
2. Объясните пожалуйста откуда берется значение переменной value
Записан
Alf
Гость
« Ответ #1 : 10-09-2005 21:38 » new

1. Дробную часть можно получить и проще:

Код:
      double d = 5.7;
      int i = (int)d;
      double fract = d - i;

(Конечно же, лучше оформить функцией).

2. Данные в компьютере представляются в виде двоичных, а не десятичных дробей. Поэтому зачастую дробь, выглядящая гладко в десятичном представлении, в двоичном представляет собой бесконечную цепочку (например, 1.9999999.... вместо 2.0).

Все числа в формате плавающей точки представляют собой значения, округленные с некоторой точностью (в случае double - примерно 15 знаков). При выполнении арифметических операций ошибка округления накапливается. Поэтому не стоит паниковать, если результат отличается от ожидаемого в 14-15 знаке, это вполне обычное явление. Точные вычисления возможны лишь для интегральных типов данных.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines