Разделянето в C++ не работи според очакванията

Работех върху нещо друго, но всичко излезе като нула, така че направих този минималистичен пример и резултатът все още е 0.

#include <iostream>

int main(int argc, char** argv)
{
  double f=3/5;
  std::cout << f;
  return 0;
}

какво ми липсва


person Psirus    schedule 23.05.2011    source източник


Отговори (6)


Пропускате факта, че 3 и 5 са ​​цели числа, така че получавате целочислено деление. За да накарате компилатора да извърши деление с плаваща запетая, направете едно от тях реално число:

 double f = 3.0 / 5;
person Community    schedule 23.05.2011

Не е необходимо да бъде .0, можете също да направите 3./5 или 3/5. или 3e+0 / 5 или 3 / 5e-0 или 0xCp-2 / 5 или... Трябва само да има включен индикатор, така че компилаторът да знае, че трябва да изпълнява делението като плаваща запетая.

Друга възможност: double f=double(3)/5. Това е много повече писане, но не оставя никакво съмнение в това, което правите.

Или просто използвайте double f=.6, това също върши работа...

person leftaroundabout    schedule 23.05.2011

Опитайте тази:

double f = 3.0/5.0;

това трябва да реши проблема ви

person sergio    schedule 23.05.2011

Опитайте да поставите .0 след един от делителите. Това ще ги преобразува в литерали с плаваща запетая.

person Diego Sevilla    schedule 23.05.2011

Вие използвате цели числа. Можете да направите много неща, за да накарате вашите константи да се удвоят като оставени около състояния, но това не е добре, чисто добре. Трудно е за четене и е объркващо. Ако искате 3 и 5, направете ги 3.0 и 5.0. Всеки ще разбере какво имате предвид, ако бъде принуден да прочете вашия код. Голяма част от това, което той/тя заявява, наистина изисква да знаете C/C++ и как плаващите елементи са хранилище, за да правите глави или опашки.

person Joe Tyman    schedule 23.05.2011
comment
Е, мислех, че е очевидно, че 0xCp-2 / 5 не трябва да се приема наистина сериозно! ...Но що се отнася до използването на 3.0: това е въпрос на вкус. Аз лично мразя да го пиша по този начин, защото в науката всеки краен брой цифри след десетичната запетая подсказва за някаква неточност в измерените стойности и т.н., така че когато видя 3.0, винаги мисля за 3±.05 и 3.0/ 5.0 е .6±.01 за мен. Това не е двойна точност! Предпочитам 3./5. - person leftaroundabout; 24.05.2011
comment
Целият смисъл на публикацията ми беше да я улесня за четене. 3./5 не изглежда като стандартно математическо уравнение. Трябва да познавате аудиторията си: не мисля, че плакатът (ако има проблеми с разликата между real и int) е програмиране за научни приложения на високо ниво, така че бих помислил, че колкото по-лесно, толкова по-добре. - person Joe Tyman; 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;
}
person Färid Alijani    schedule 01.04.2019