Я пытаюсь получить часть int и десятичную часть двойного числа. Вот как я это реализовал:
void func(double d)
{
int intpart, decpart;
intpart = d;
string szDec = to_string(d);
szDec = szDec.substr(szDec.find(".") + 1);
decpart = stoi(szDec);
m_iNom = intpart * decpart + 1;
m_iDenom = decpart;
}
Перехожу на func 0.5, проблема возникает при попытке получить десятичную часть как целое число.
Вместо получения 5 to_String делает szDec = "0.500000000000000"
а при использовании функции substr() szDec = "0,500000"
оставив мне decpart = 500000 вместо 5.
Как остановить функцию to_String и функцию substr от добавления нулей к строке и преобразования ее в число с плавающей запятой?
3.1
? Когда вы сохраняете это в двойном, вы получаете3.100000000000000088817841970012523233890533447265625
. Вы хотите вернуть3
и100000000000000088817841970012523233890533447265625
или3
и1
? И если вы хотите3
и1
, как именно вы хотите, чтобы они вычислялись? - person Cubbi   schedule 27.09.20140.5
и0.05
приведут к одному и тому же результату: десятичная часть будет5
. - person Jarod42   schedule 27.09.2014double
, вы не получите все эти числа. Если вы вводите десятичную дробь, оставьте ее десятичной дробью. - person Cubbi   schedule 27.09.2014std::modf
) имеет смысл. Но похоже, что это проблема XY - person Jarod42   schedule 27.09.2014