Ruby: Как округлить float до двух знаков после запятой
Округлить число с плавающей точкой до целого числа в руби можно с помощью метода round:
> a = 25.125 => 25.125 > a.round => 25
Этому методу в качестве параметра можно передать число знаков после запятой, которое необходимо оставить:
> a.round(2) => 25.13
Округлить до ближайшего большего целого числа можно с помощью ceil (этот метод также принимает на вход параметр):
> a.ceil => 26 > a.ceil(1) => 25.2
А до ближайшего меньшего числа — методом floor:
> a.floor => 25 > a.floor(2) => 25.12
Знаки после запятой
Добрый день!
Можно ли контролировать количество знаков после запятой в типе double? Т.е. существует операция вычесления, после которой образуется остаток от деления, с большим количеством знаков после запятой. Могу ли я, в данной ситуации, не округляя, а просто беря нужное мне количество выполнять операции дальше?
Пример кода:
1 2 3 4 5 6 7 8
#include int main() { double a = 10/7; // результатом будет 1.42857143 // однако мне хотелось бы видеть 1.42 return 0; }
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
знаки после запятой
Здравствуйте, простой вопрос на который я никак не могу найти ответ. Почему после компиляции.
Знаки после запятой C++
Можно ли в C++ как-то получить в результате число, в котором выводится полностью больше 6 символов.
Табуляция и знаки после запятой
Здравствуйте, помогите пожалуйста. Как сделать так, чтоб программа выводила данные в нормальном.
Переменная float — знаки после запятой
Итак я задаю какую-либо переменную типа float. Потом, с помощью scanf кладу в эту переменную.
4687 / 2796 / 1473
Регистрация: 14.12.2018
Сообщений: 5,139
Записей в блоге: 1
Сообщение было отмечено Hou5ton как решение
Решение
Сообщение от Hou5ton
#include
int main()
double a = 10/7; // результатом будет 1.42857143
// однако мне хотелось бы видеть 1.42
return 0;
>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#include #include using namespace std; double fPre(double a, int n) { return int(a * pow(10.0, n)) / pow(10.0, n); } int main() { double a = 10.0 / 7; // 1.42857143 cout fPre(a, 2) endl; // 1.42 cout fPre(a, 3) endl; // 1.428 return 0; system("pause"); return 0; }
429 / 312 / 129
Регистрация: 09.02.2021
Сообщений: 1,096
Записей в блоге: 1
1 2 3 4 5 6 7 8
#include using namespace std; int main() { cout.precision(3); cout double(10.0 / 7.0); return 0; }
Пробуйте с етим
cout.precision(3);
4687 / 2796 / 1473
Регистрация: 14.12.2018
Сообщений: 5,139
Записей в блоге: 1
Сообщение от matviiv
Пробуйте с етим
11177 / 6122 / 1675
Регистрация: 18.10.2014
Сообщений: 15,416
Сообщение от Hou5ton
Можно ли контролировать количество знаков после запятой в типе double?
Сообщение от Hou5ton
Т.е. существует операция вычесления, после которой образуется остаток от деления, с большим количеством знаков после запятой.
Готовой — не существует. Можете попробовать написать такую руками, но тип double для таких задач подходит плохо.
Сообщение от Hou5ton
// однако мне хотелось бы видеть 1.42
«Видеть»? Так может вам не нужно душить знаки прямо в вычислениях, а урезать их при выводе результата?
Еще раз: что именно вам нужно? Округленные вычисления? Или округленный вывод результата?
429 / 312 / 129
Регистрация: 09.02.2021
Сообщений: 1,096
Записей в блоге: 1
Volga_, вопшето 1.43, округлило
4687 / 2796 / 1473
Регистрация: 14.12.2018
Сообщений: 5,139
Записей в блоге: 1
Сообщение от matviiv
1.43, округлило
Он не хочет округлить число, только резать число.
429 / 312 / 129
Регистрация: 09.02.2021
Сообщений: 1,096
Записей в блоге: 1
Volga_, а ну тогда ваш код,ну ничего страшного ж,я просто ответил на ваше 1.423
Регистрация: 06.05.2020
Сообщений: 27
Сообщение от Volga_
return int(a * pow(10.0, n)) / pow(10.0, n);
Да это решение мне действительно помогло, способ исключительно математический. Спасибо.
Добавлено через 10 минут
Сообщение от TheCalligrapher
«Видеть»? Так может вам не нужно душить знаки прямо в вычислениях, а урезать их при выводе результата?
Еще раз: что именно вам нужно? Округленные вычисления? Или округленный вывод результата?
Спаибо за ответ.
Я создаю программу по вычеслению радиуса разворота для самолета, и в формуле его нахождения присутствует тангегенс.
Который выдает огромные значения после запятой, что является плюсом, но существует прибор на основе логарифмической линейки (НЛ-10м), который делает расчеты не такими точными, приблизительным (разница от 10-100метров), однако им пользуются сплошь и рядом в ациации.
Мне необходимо сделать вычесления не только на основании точности, который дает тангенс, но и приблизителный который дает линейка, чтобы показать разницу.
Сообщение от Volga_
Округлите число с плавающей точкой до 2 знаков после запятой в Java
В этом посте будет обсуждаться, как округлить двойное число до 2 знаков после запятой в Java.
1. Использование Math.round() метод
The Math.round() метод возвращает значение указанного двойного округления до ближайшего длинного значения. Следующее решение демонстрирует его использование для округления двойного числа до 2 знаков после запятой. Обратите внимание, что количество нулей указывает количество десятичных знаков.
public class Main < public static void main ( String [ ] args ) < double random = Math . random ( ) ; System . out . println ( random ) ; double roundOff = Math . round ( random * 100.0 ) / 100.0 ; System . out . println ( roundOff ) ;
Обратите внимание, что количество нулей указывает количество десятичных знаков. Поэтому, чтобы округлить до 3 знаков после запятой, выполните следующие действия:
public class Main < public static void main ( String [ ] args ) < double random = Math . random ( ) ; System . out . println ( random ) ; double roundOff = Math . round ( random * 1000.0 ) / 1000.0 ; System . out . println ( roundOff ) ;
Вот альтернативная, эквивалентная версия приведенного выше кода:
public class Main < public static void main ( String [ ] args ) < double random = Math . random ( ) ; double roundOff = ( double ) Math . round ( random * 100 ) / 100 ; System . out . println ( roundOff ) ;
Арифметика с плавающей запятой может быть очень сложной, и этот метод также не всегда работает так, как хотелось бы. Например, значение 296.335 округляется до 296.33 вместо 296.34 .
public class Main < public static void main ( String [ ] args ) < double random = 296.335 ; System . out . println ( random * 100.0 ) ; // 29633.499999999996 System . out . println ( Math . round ( random * 100.0 ) / 100.0 ) ; // 296.33
2. Использование DecimalFormat.format() метод
Здесь идея состоит в том, чтобы создать DecimalFormat используя указанный шаблон и вызовите DecimalFormat.format() метод для получения отформатированной строки. Чтобы ограничить двойное значение двумя десятичными точками, вы можете использовать шаблон #.## . Вы также можете установить RoundingMode с использованием setRoundingMode() метод. Этот подход страдает той же проблемой, что и первый подход. т. е. значение 296.335 округляется до 296.33 вместо 296.34 .
Ограничить поплавок двумя знаками после десятичной точки в C++
В этом посте будет обсуждаться, как ограничить значение с плавающей запятой двумя знаками после десятичной точки в C++.
1. Использование round() функция
Существует несколько вариантов ограничения числа с плавающей запятой двумя знаками после запятой, в зависимости от того, хотите ли вы округлить число до ближайшего, округлить в меньшую или большую сторону. Например, следующий код округляет число с плавающей запятой до двух знаков после запятой.