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



мне нужно отформатировать поплавок до " 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 значение return not Double



.

792   10  

10 ответов:

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

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

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

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

Edit:пример

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

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

результат будет раунд Финал прайс -- > 5652.26

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

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));

вот быстрый пример использования DecimalFormat класс, упомянутый Ник.

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

вывод инструкции печати будет 12.35. Обратите внимание, что он будет вокруг него для вас.

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

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

уверен, что это не половина, хотя округления.

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

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

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;
}

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

return value.toString();

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

value.floatValue();

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

Я искал ответ на этот вопрос и позже я разработал метод! :) Справедливое предупреждение, это округление стоимости.

private float limitDigits(float number) {
    return Float.valueOf(String.format(Locale.getDefault(), "%.2f", number));
}

Comments

    Ничего не найдено.