How to convert from float to bigDecimal in java?
4 Answers
BigDecimal value = new BigDecimal(Float.toString(123.4f));
From the javadocs, the string constructor is generally the preferred way to convert a float into a BigDecimal, as it doesn't suffer from the unpredictability of the BigDecimal(double) constructor.
Quote from the docs:
Note: For values other float and double NaN and ±Infinity, this constructor is compatible with the values returned by Float.toString(float) and Double.toString(double). This is generally the preferred way to convert a float or double into a BigDecimal, as it doesn't suffer from the unpredictability of the BigDecimal(double) constructor.
-
7But converting a `float` to a String explicitly doesn't help you solve the unpredictability automatically - you need to take care to format the value correctly (rounding etc.). – Jesper Sep 30 '10 at 08:58
-
How to convert and format 9.991f to 910 and 9.99f to 9.99? – Jobin Aug 10 '21 at 08:45
float f = 45.6f;
BigDecimal bd = BigDecimal.valueOf(f);
Quote from documentations:
Note: This is generally the preferred way to convert a double (or float) into a BigDecimal, as the value returned is equal to that resulting from constructing a BigDecimal from the result of using Double.toString(double).
Reference: BigDecimal (Java Platform SE 6)
- 1,653
- 3
- 19
- 43
-
2`Double.toString(float)` produces a different result than `Float.toString(float)`. – Lakatos Gyula Jan 24 '17 at 13:12
-
1
For a precision of 3 digits after the decimal point:
BigDecimal value = new BigDecimal(f,
new MathContext(3, RoundingMode.HALF_EVEN));
- 32,157
- 9
- 69
- 96
This is upto my knowledge :
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;
}
}
*Note:This is generally the preferred way to convert a double (or float) into a BigDecimal, as the value returned is equal to that resulting from constructing a BigDecimal from the result of using Double.toString(double).
public static BigDecimal valueOf(double val)
Parameters:
val - double to convert to a BigDecimal.
Returns:
a BigDecimal whose value is equal to or approximately equal to the value of val.
Throws:
NumberFormatException - if val is infinite or NaN.
Since:
1.5
I have checked whether Infinite or Not a Number, so that there is less chances of NumberFormatException
- 53
- 2