Добавление числа с плавающей запятой к целому числу

#c #double #zero #fractions

#c #двойной #ноль #дроби

Вопрос:

мне нужна помощь с домашним заданием, мне нужно создать программу на языке Си, которая получает двойное число и печатает число без плавающей запятой, например, получает 157.89943912 и печатает 15789943912

итак, я сделал это

     void main()
    {
        double x = 157.89943912; 
        while (x - (int)x > 0.0000001)
        {
            x *= 10;
        }
        printf("%lf", x);

        scanf_s("%d");

    }
 

теперь из-за двойной нулевой неточности цикл выполняется вечно
, но если я поставлю 157.8994391 (на один десятичный знак с плавающей запятой меньше)
это работает..

заранее спасибо !.

Комментарии:

1. будет ли это обманом sprintf() double , а затем удалить «.» из строки?

2. Ваша проблема связана с ошибкой вычисления с плавающей запятой, вы ошибочно предполагаете, что 157.89943912 * 10 равно 1578.9943912 и т. Д., Это не так

3. @bruno не совсем: 15789943912 может быть не представлен в виде int (для этого требуется не менее 5 байт), поэтому приведение будет переполнено

4. @IngoLeonhardt да, также

5. scanf_s("%d"); ? ouppps