Как конфертировать из float в bigDecimal в Java? - PullRequest
36 голосов
/ 30 сентября 2010

Как конфертировать из float в bigDecimal в Java?

Ответы [ 4 ]

43 голосов
/ 30 сентября 2010
BigDecimal value = new BigDecimal(Float.toString(123.4f));

Из javadocs строковый конструктор обычно является предпочтительным способом преобразования float в BigDecimal, поскольку он не страдает от непредсказуемости конструктора BigDecimal(double).

Цитата из документации:

Примечание. Для значений, других float и double NaN и ± Infinity, этот конструктор совместим со значениями, возвращаемыми Float.toString (float) и Double.toString (double). Как правило, это предпочтительный способ преобразования числа с плавающей запятой или типа double в BigDecimal , поскольку он не страдает от непредсказуемости конструктора BigDecimal (double).

20 голосов
/ 27 июня 2013
float f = 45.6f;
BigDecimal bd = BigDecimal.valueOf(f);

Цитата из документации:

Примечание: как правило, это предпочтительный способ конвертации двойного (или float) в BigDecimal, так как возвращаемое значение равно в результате построения BigDecimal из результата использования Double.toString (двойной).

Ссылка: BigDecimal (Java Platform SE 6)

8 голосов
/ 30 сентября 2010

Для точности 3 цифры после десятичной точки:

BigDecimal value = new BigDecimal(f,
        new MathContext(3, RoundingMode.HALF_EVEN));
1 голос
/ 10 октября 2017

Насколько я знаю:

   public static BigDecimal floatToBigDecimal(Float a){


    if(a == null || a.isInfinite() || a.isNaN()){
        return BigDecimal.ZERO;
    }
    try{
        return BigDecimal.valueOf(a);

    }catch(Exception e){
        return BigDecimal.ZERO;
    }

}

* Примечание. Обычно это предпочтительный способ преобразования double (или числа с плавающей точкой) в BigDecimal, поскольку возвращаемое значение равно значению, полученному в результате создания BigDecimal из результата использования Double.toString (double).

публичное статическое BigDecimal valueOf (double val)

Параметры :
val - double для преобразования в BigDecimal.
Возвращает
BigDecimal, значение которого равно или приблизительно равно значению val.
Выдает:
NumberFormatException - если значение val бесконечно или NaN.
С:
1,5

Я проверил, является ли бесконечным или нет число, чтобы меньше шансов NumberFormatException

...