singlepost

ПОчему не работает??? << На главную или назад  

почему не работает? Например вводишь 5.1234, а он выводит 0.000000???
#include<stdio.h>
void main()
{
double a;
scanf("%5.2lf",&a);
printf("a=%lf",a);
}
И ещё! А если написать без %5.2lf, а просто %lf. Я ввожу 1.01234, а он сохраняет в памяти 1.0123400000000000200000000000000. Откуда берётся эта 2? Как с этим бороться? Пишу программу умножения двух вещественных чисел столбиком.

10 ответов в теме “ПОчему не работает???”

  1. 9
    Виктор Степанов ответил:

    Народ, подскажите! Большая часть видео в контакте у меня не проигрывается! Просто темный экранчик, даже значка плэй нет. Почему??

  2. 8
    Vlad Ламбар ответил:

    #4
    google this:

    cout.precision;

    Пора переходить на С++, с С…

  3. 7
    Макс Донцов ответил:

    не понятно что ты вообще делаешь

  4. 6
    Жека Кирпичев ответил:

    Насчет "откуда берется эта 2":
    Все числа, в т.ч. и вещественные, представляются в компьютере в двоичной системе исчисления.
    При разборе десятичной строки функция scanf запихивает в переменную не точное (поскольку это не всегда возможно), а самое близкое к считываемому из представимых в двоичной системе чисел.
    1.0123400000000000200000000000000 – это самое близкое к 1.01234 из чисел типа double (64 двоичных бита).

  5. 5
    Жека Кирпичев ответил:

    Попробуй представить в двоичной системе 1.3. Сделай это, представив 13 и затем деля его на 10 так же, как в десятичной ты делил бы, например, 17 на 14 – получится периодическая дробь. То есть, число 1.3 можно точно представить в десятичной системе, но нельзя в двоичной.

  6. 4
    Артём Викторович ответил:

    а
    float a;
    вместо double не пробовал?

  7. 3
    Андрей Долинин ответил:

    мне нужен ввод с опр. точностью

  8. 2
    Макс Донцов ответил:

    а нах писать %5.2lf…если можно просто %f.И ваще нах тебе scanf, если можно использовать cout<<

  9. 1
    Макс Донцов ответил:

    и cin>>

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.