Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > [C++ WinAPI]Робота с double


Автор: Zorak 1.2.2009, 21:07
как сделать так, что б в перменную buf типа double запоминалось число например 1,21654, а не 1,00000... вот например:
Код

double buf;
buf = (800/2-302)/70; <------ buf = 1.00000

Почему ?

Автор: mes 1.2.2009, 21:12
...

Автор: 586 1.2.2009, 21:18
Код
double buf;
buf = (800.0/2.0-302.0)/70.0;

Автор: DaKedwin 1.2.2009, 21:20
Можно задать тип явно:
Код

buf = (double)(800/2-302)/70;

Автор: 586 1.2.2009, 21:25
DaKedwin, пока он работает с целыми числами, у него дробь теряется.
Вот другой вариант:
Код
double buf;
buf = (800.0/2-302)/70;

Автор: Фантом 1.2.2009, 21:29
Цитата(Zorak @  1.2.2009,  21:07 Найти цитируемый пост)
как сделать так, что б в перменную buf типа double запоминалось число например 1,21654, а не 1,00000...


Ну, например, изучить C (или C++).  smile 

Дело в том, что при делении целого на целое (неважно, переменные это или константы) результат получается тоже целочисленным - это обычное деление с остатком. Для того, чтобы этого не происходило, хотя бы один из операндов надо сделать вещественным. Например, так:

Код

double buf;
buf = (800/2-302)/70.0;

Автор: 586 1.2.2009, 21:44
Цитата(Фантом @  1.2.2009,  21:29 Найти цитируемый пост)
Для того, чтобы этого не происходило, хотя бы один из операндов надо сделать вещественным.
Код
double buf;
buf = (800/2-302)/70.0;

Не совсем. Выражение (800/2-302) не имеет дроби. Поэтому там можно оставить целые числа. А если там вместо 800 будет стоять 801, то результаты будут разные.
Код
int main()
{
    double a, b;
    a = (801.0/2-302)/70;
    b = (801/2-302)/70.0;

    printf("%f  %f\n", a, b);
    getchar();
    return 0;
}


1.407143  1.400000

Автор: Zorak 1.2.2009, 21:57
))Получилось) спасибо всем... использовал (double)(800/2-302)/70;

Автор: Фантом 1.2.2009, 22:03
Цитата(586 @  1.2.2009,  21:44 Найти цитируемый пост)
Не совсем.


Правильно, только второе предложение (про "один из операндов") шло за первым и, как следствие, относилось к общему случаю для одного деления.  smile 

Автор: GremlinProg 2.2.2009, 00:37
Перемещено в "С/C++ общие вопросы"

Автор: inside_pointer 2.2.2009, 06:47
Код

    a = (801.0/2-302)/70;
    b = (801/2-302)/70.0;


Код

    a = (801/2.0-302)/70;
    b = (800/2.0-302)/70;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)