Мне нужно отформатировать число с плавающей точкой "n" десятичных знаков.
пытался BigDecimal, но возвращаемое значение не является правильным ...
public static float Redondear(float pNumero, int pCantidadDecimales) {
// the function is call with the values Redondear(625.3f, 2)
BigDecimal value = new BigDecimal(pNumero);
value = value.setScale(pCantidadDecimales, RoundingMode.HALF_EVEN); // here the value is correct (625.30)
return value.floatValue(); // but here the values is 625.3
}
Мне нужно вернуть значение с плавающей запятой с указанием количества десятичных знаков.
Мне нужно Float
возвращать значение неDouble
,
String.format(java.util.Locale.US,"%.2f", floatValue);
Посмотрите на DecimalFormat . Вы можете легко использовать его, чтобы взять число и задать ему количество десятичных знаков.
Изменить : пример
источник
DecimalFormat
конструктора не рекомендуется, см. Мой ответ для правильного использованияNumberFormat
.Попробуйте это, это мне очень помогло
Результат будет roundfinalPrice -> 5652.26
источник
Следует отметить, что использование
DecimalFormat
конструктора не рекомендуется. Javadoc для этого класса гласит:https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html
Итак, что вам нужно сделать, это (например):
источник
Вот быстрый пример с использованием
DecimalFormat
класса, упомянутого Ником.Выходные данные оператора печати будут 12,35. Обратите внимание, что он будет округлять его для вас.
источник
DecimalFormat
конструктора не рекомендуется, см. Мой ответ для правильного использованияNumberFormat
.Кинда удивилась, что никто не указал прямой способ сделать это, что достаточно просто.
Я уверен, что это не делает даже половину округления.
Что бы это ни стоило, округление до половины даже будет хаотичным и непредсказуемым всякий раз, когда вы смешиваете двоичные значения с плавающей точкой с арифметикой с основанием 10. Я уверен, что это невозможно сделать. Основная проблема заключается в том, что значение типа 1.105 не может быть представлено точно с плавающей запятой. Значение с плавающей запятой будет что-то вроде 1.105000000000001 или 1.104999999999999. Таким образом, любая попытка выполнить полуначетное округление приводит к ошибкам в представительном кодировании.
Реализации IEEE с плавающей запятой будут выполнять половину округления, но они выполняют двоичное, а не десятичное. Так что вы, вероятно, в порядке
источник
pow
это слишком дорогая операция для округления?источник
Это гораздо менее профессиональный и более дорогой способ, но он должен быть проще для понимания и более полезным для начинающих.
источник
Я думаю, что вы хотите, это
и используйте возвращаемое значение для отображения.
всегда будет возвращать 625,3, потому что он в основном используется для вычисления чего-либо.
источник
Я искал ответ на этот вопрос, а потом разработал метод! :) Справедливое предупреждение, это округляет значение.
источник
Вы можете использовать десятичный формат, если хотите отформатировать число в строку, например:
Выход этого кода будет:
123455,0
Вы можете добавить больше нулей в десятичный формат, в зависимости от того, какой вывод вы хотите.
источник