I have a silly problem.
Let's say I have certain double number:
double doubleValue=4.1;
Is there a way to present this value as 4.10
but not as String but rather as double?
I have a silly problem.
Let's say I have certain double number:
double doubleValue=4.1;
Is there a way to present this value as 4.10
but not as String but rather as double?
If you want to print two decimals do this:
double d = 4.10;
DecimalFormat df = new DecimalFormat("#.00");
System.out.print(df.format(d));
this will print 4.10
and the number is a double
Here is a fully working example which you can compile and run to print 4.10:
import java.text.DecimalFormat;
class twoDecimals {
public static void main(String[] args) {
double d = 4.10;
DecimalFormat df = new DecimalFormat("#.00");
System.out.print(df.format(d));
}
}
even if you set
double d = 4.1;
it will print 4.10
.
If you set double d = 4;
it will print 4.00 which means always print two decimal points
Simply do this,
double doubleValue=4.1;
String.format(Locale.ROOT, "%.2f", doubleValue );
Output:
4.10
Using this approach you don't need to make use of DecimalFormat
which will also reduce unnecessary imports
You can't define the precision of the data type double
.
If you need to define the precision of a decimal number you can use the class BigDecimal
.
As javadoc explains BigDecimal is used for an arbitrary-precision signed decimal numbers.
Here is the reference
http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html
I don't get why you want double number with 2 digits after decimals with 0 filling the gap. Are you planning to display it somewhere ?
The Answer is , No, you can't.
Actually, you can set the precision of a double if it doesn't have any 0 after that.
For ex -
4.10000 // and you want to set the precision to 2 digits
// it will still give you 4.1 not 4.10
if it is 4.1 // and you want to set precision to 3 digits
// it will still give you 4.1 not 4.100
if it is 4.1234565 // and you want to set precision to 3 digits,
// it will give you 4.123
Even when you format it using String.format and change it back to decimal or use BigDecimal's setScale method to set precision, you can't get a double value ending with 0 after decimal.
If you want to display with certain decimal somewhere, you can do that by converting into String.
Here are 2 methods to do that, (will set precision but will not set 0 at the end to fill the gap)
1.
int numberOfDigitsAfterDecimal = 2;
double yourDoubleResult = 4.1000000000;
Double resultToBeShown = new BigDecimal(yourDoubleResult).setScale(numberOfDigitsAfterDecimal, BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(resultToBeShown);
2.
double doubleValue=4.1;
double newValue = Double.parseDouble(String.format( "%.2f", doubleValue ));
System.out.println(newValue);
For getting 4.10 as string ,
double doubleValue=4.1;
String newValue = String.format( "%.2f", doubleValue );
System.out.println(newValue);