Здравствуйте!
Реализую проект на Qt. Пытаюсь вывести дробь, знаменатель которой не является степенью двойки (19 знаков после запятой). Например, 1/5 = 0,2000000000000000111.
Понятно, что такой вид - особенность представления чисел с плавающей точкой в C++. Но как вывести доступный для пользователя результат (1/5 = 0,2)? Формат вывода желательно не менять.
Пользуюсь следующим методом для вывода числа.
QString MainWindow::numberFormat(const double &number)
{
QString str = QLocale::system().toString(number, 'f', 21);
return str.remove(QRegExp(",?0+$"));
}
Прошу вашей помощи, заранее благодарю.
Ну прочтите документацию - вы же пытаетесь вывести 21 знак (toString(number, 'f', 21)
). Зачем? Уберите точность вывода до реальной. Думаю, предлагаемых по умолчанию 6 знаков, как говорится, за глаза хватит... А то и меньше.
Я в своё время нашёл только один удобный выход из этой ситуации. Нужно реализовать собственный алгоритм деления числителя на знаменатель "уголком", как в школе, выводя одну десятичную цифру результата за другой. Получив строку нужной длины из цифр после запятой, удаляем нули на конце.
Код такой функции предельно прост (псевдокод, из головы):
void div (unsigned int num, unsigned int denom, size_t n) {
printf ("%u,", num/denom); // Целая часть
num %= denom; // Дробная часть.
while (n-- > 0) { // n - сколько нужно цифр.
num *= 10;
unsigned int d = num/denom;
printf ("%u", d);
num -= d*denom;
}
}
Разумеется, вместо printf
вам нужно что-то другое, например, сохранение цифр в строку или что вы там собираетесь делать, я не знаю.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как можно включить отображение горизонтального ScrollBar в QTreeView с фиксированной шириной при выходе названия ветки за границы view'шки?
Пишу запрос на выборку ТОП-10 покупателейВывести покупателей за все время я смог запросто, но встал вопрос о сортировке по дате
Как сделать так, чтобы выдвижная панель выезжала на всю высоту экрана (высоту, а не ширину, с шириной все ясно)Я имею ввиду, чтобы она заезжала...
При деплое через консоль mvn tomcat7:deploy - все успешно, но когда я нажимаю в intellij idea на деплой выдает этоПолдня мучаюсь