Работех върху нещо друго, но всичко излезе като нула, така че направих този минималистичен пример и резултатът все още е 0.
#include <iostream>
int main(int argc, char** argv)
{
double f=3/5;
std::cout << f;
return 0;
}
какво ми липсва
Работех върху нещо друго, но всичко излезе като нула, така че направих този минималистичен пример и резултатът все още е 0.
#include <iostream>
int main(int argc, char** argv)
{
double f=3/5;
std::cout << f;
return 0;
}
какво ми липсва
Пропускате факта, че 3 и 5 са цели числа, така че получавате целочислено деление. За да накарате компилатора да извърши деление с плаваща запетая, направете едно от тях реално число:
double f = 3.0 / 5;
Не е необходимо да бъде .0
, можете също да направите 3./5
или 3/5.
или 3e+0 / 5
или 3 / 5e-0
или 0xCp-2 / 5
или... Трябва само да има включен индикатор, така че компилаторът да знае, че трябва да изпълнява делението като плаваща запетая.
Друга възможност: double f=double(3)/5
. Това е много повече писане, но не оставя никакво съмнение в това, което правите.
Или просто използвайте double f=.6
, това също върши работа...
Опитайте тази:
double f = 3.0/5.0;
това трябва да реши проблема ви
Опитайте да поставите .0
след един от делителите. Това ще ги преобразува в литерали с плаваща запетая.
Вие използвате цели числа. Можете да направите много неща, за да накарате вашите константи да се удвоят като оставени около състояния, но това не е добре, чисто добре. Трудно е за четене и е объркващо. Ако искате 3 и 5, направете ги 3.0 и 5.0. Всеки ще разбере какво имате предвид, ако бъде принуден да прочете вашия код. Голяма част от това, което той/тя заявява, наистина изисква да знаете C/C++ и как плаващите елементи са хранилище, за да правите глави или опашки.
0xCp-2 / 5
не трябва да се приема наистина сериозно! ...Но що се отнася до използването на 3.0: това е въпрос на вкус. Аз лично мразя да го пиша по този начин, защото в науката всеки краен брой цифри след десетичната запетая подсказва за някаква неточност в измерените стойности и т.н., така че когато видя 3.0, винаги мисля за 3±.05 и 3.0/ 5.0 е .6±.01 за мен. Това не е двойна точност! Предпочитам 3./5
.
- person leftaroundabout; 24.05.2011
В случай, че запазите общите си променливи с int
и искате да получите съотношението като double
:
using namespace std;
int main()
{
int x = 7;
int y = 4;
double ratio;
ratio = static_cast<double>(x)/static_cast<double>(y);
cout << "ratio =\t"<<ratio<< endl;
}