Формат Float до n знаков после запятой

Мне нужно отформатировать float до «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 с числом десятичных знаков, которое я указываю.

Мне нужно вернуть значение Float не Double

,

Solutions Collecting From Web of "Формат Float до n знаков после запятой"

Вы также можете передать значение float и использовать:

String.format("%.2f", floatValue);

Документация

Взгляните на DecimalFormat . Вы можете легко использовать его, чтобы взять число и дать ему заданное количество знаков после запятой.

Изменить : пример

Попробуйте это, это очень помогло мне

 BigDecimal roundfinalPrice = new BigDecimal(5652.25622f).setScale(2,BigDecimal.ROUND_HALF_UP); 

Результат будет roundfinalЦена -> 5652.26

Следует отметить, что использование конструктора DecimalFormat не рекомендуется. В javadoc для этого класса указано:

В общем случае не называйте конструкторы DecimalFormat напрямую, так как фабричные методы NumberFormat могут возвращать подклассы, отличные от DecimalFormat.

https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html

Так что вам нужно сделать (например):

 NumberFormat formatter = NumberFormat.getInstance(Locale.US); formatter.setMaximumFractionDigits(2); formatter.setMinimumFractionDigits(2); formatter.setRoundingMode(RoundingMode.HALF_UP); Float formatedFloat = new Float(formatter.format(floatValue)); 

Своего удивления никто не указал на прямой способ сделать это, что достаточно легко.

 double roundToDecimalPlaces(double value, int decimalPlaces) { double shift = Math.pow(10,decimalPlaces); return Math.round(value*shift)/shift; } 

Довольно точно, что это не делает половину даже округления.

Для того, что это стоит, полу-четное округление будет хаотичным и непредсказуемым в любое время, когда вы смешиваете двоичные значения с плавающей запятой с арифметикой base-10. Я почти уверен, что это невозможно. Основная проблема заключается в том, что значение, подобное 1.105, не может быть точно представлено в плавающей запятой. Значение с плавающей запятой будет примерно 1.105000000000001, или 1.104999999999999. Таким образом, любая попытка выполнить половинное округление округляется до ошибок репрезентативного кодирования.

Реализации с плавающей запятой IEEE будут делать половину округления, но они выполняют двоичное полукругление, а не десятичное округление. Так что вы, наверное, в порядке

Ниже приведен пример с использованием класса DecimalFormat упомянутого Ником.

 float f = 12.345f; DecimalFormat df = new DecimalFormat("#.00"); System.out.println(df.format(f)); 

Вывод отчета о печати будет 12.35. Заметьте, что это будет вокруг вас.

Я думаю, что вы хотите ist

 return value.toString(); 

И используйте возвращаемое значение для отображения.

 value.floatValue(); 

Всегда будет возвращать 625,3, потому что в основном используется для вычисления чего-то.

 public static double roundToDouble(float d, int decimalPlace) { BigDecimal bd = new BigDecimal(Float.toString(d)); bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP); return bd.doubleValue(); } 

Это гораздо менее профессиональный и гораздо более дорогой способ, но его должно быть легче понять и более полезно для начинающих.

 public static float roundFloat(float F, int roundTo){ String num = "#########."; for (int count = 0; count < roundTo; count++){ num += "0"; } DecimalFormat df = new DecimalFormat(num); df.setRoundingMode(RoundingMode.HALF_UP); String S = df.format(F); F = Float.parseFloat(S); return F; }