How to print a float with 2 decimal places in Java?
Mia Lopez
Can I do it with System.out.print?
18 Answers
You can use the printf method, like so:
System.out.printf("%.2f", val);In short, the %.2f syntax tells Java to return your variable (val) with 2 decimal places (.2) in decimal representation of a floating-point number (f) from the start of the format specifier (%).
There are other conversion characters you can use besides f:
d: decimal integero: octal integere: floating-point in scientific notation
You can use DecimalFormat. One way to use it:
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
System.out.println(df.format(decimalNumber));Another one is to construct it using the #.## format.
I find all formatting options less readable than calling the formatting methods, but that's a matter of preference.
7I would suggest using String.format() if you need the value as a String in your code.
For example, you can use String.format() in the following way:
float myFloat = 2.001f;
String formattedString = String.format("%.02f", myFloat); 1 double d = 1.234567;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d)); 2 float f = 102.236569f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsF = Float.valueOf(decimalFormat.format(f)); // output is 102.24 1 You may use this quick codes below that changed itself at the end. Add how many zeros as refers to after the point
float y1 = 0.123456789;
DecimalFormat df = new DecimalFormat("#.00");
y1 = Float.valueOf(df.format(y1));2The variable y1 was equals to 0.123456789 before. After the code it turns into 0.12 only.
float floatValue=22.34555f;
System.out.print(String.format("%.2f", floatValue));Output is 22.35. If you need 3 decimal points change it to "%.3f".
Many people have mentioned DecimalFormat. But you can also use printf if you have a recent version of Java:
System.out.printf("%1.2f", 3.14159D);See the docs on the Formatter for more information about the printf format string.
A simple trick is to generate a shorter version of your variable by multiplying it with e.g. 100, rounding it and dividing it by 100.0 again. This way you generate a variable, with 2 decimal places:
double new_variable = Math.round(old_variable*100) / 100.0;This "cheap trick" was always good enough for me, and works in any language (I am not a Java person, just learning it).
1Look at DecimalFormat
Here is an example from the tutorial:
DecimalFormat myFormatter = new DecimalFormat(pattern); String output = myFormatter.format(value); System.out.println(value + " " + pattern + " " + output);If you choose a pattern like "###.##", you will get two decimal places, and I think that the values are rounded up. You will want to look at the link to get the exact format you want (e.g., whether you want trailing zeros)
To print a float up to 2 decimal places in Java:
float f = (float)11/3; System.out.print(String.format("%.2f",f));OUTPUT: 3.67
> use %.3f for up to three decimal places.
Below is code how you can display an output of float data with 2 decimal places in Java:
float ratingValue = 52.98929821f;
DecimalFormat decimalFormat = new DecimalFormat("#.##");
float twoDigitsFR = Float.valueOf(decimalFormat.format(ratingValue)); // output is 52.98 OK - str to float.
package test;
import java.text.DecimalFormat;
public class TestPtz { public static void main(String[] args) { String preset0 = "0.09,0.20,0.09,0.07"; String[] thisto = preset0.split(","); float a = (Float.valueOf(thisto[0])).floatValue(); System.out.println("[Original]: " + a); a = (float) (a + 0.01); // Part 1 - for display / debug System.out.printf("[Local]: %.2f \n", a); // Part 2 - when value requires to be send as it is DecimalFormat df = new DecimalFormat(); df.setMinimumFractionDigits(2); df.setMaximumFractionDigits(2); System.out.println("[Remote]: " + df.format(a)); }
}Output:
run:
[Original]: 0.09
[Local]: 0.10
[Remote]: 0.10
BUILD SUCCESSFUL (total time: 0 seconds) One issue that had me for an hour or more, on DecimalFormat- It handles double and float inputs differently. Even change of RoundingMode did not help. I am no expert but thought it may help someone like me. Ended up using Math.round instead.
See below:
DecimalFormat df = new DecimalFormat("#.##"); double d = 0.7750; System.out.println(" Double 0.7750 -> " +Double.valueOf(df.format(d))); float f = 0.7750f; System.out.println(" Float 0.7750f -> "+Float.valueOf(df.format(f))); // change the RoundingMode df.setRoundingMode(RoundingMode.HALF_UP); System.out.println(" Rounding Up Double 0.7750 -> " +Double.valueOf(df.format(d))); System.out.println(" Rounding Up Float 0.7750f -> " +Float.valueOf(df.format(f)));Output:
Double 0.7750 -> 0.78
Float 0.7750f -> 0.77
Rounding Up Double 0.7750 -> 0.78
Rounding Up Float 0.7750f -> 0.77 small simple program for demonstration:
import java.io.*;
import java.util.Scanner;
public class twovalues { public static void main(String args[]) { float a,b; Scanner sc=new Scanner(System.in); System.out.println("Enter Values For Calculation"); a=sc.nextFloat(); b=sc.nextFloat(); float c=a/b; System.out.printf("%.2f",c); }
} Just do String str = System.out.printf("%.2f", val).replace(",", "."); if you want to ensure that independently of the Locale of the user, you will always get / display a "." as decimal separator. This is a must if you don't want to make your program crash if you later do some kind of conversion like float f = Float.parseFloat(str);
Try this:-
private static String getDecimalFormat(double value) { String getValue = String.valueOf(value).split("[.]")[1]; if (getValue.length() == 1) { return String.valueOf(value).split("[.]")[0] + "."+ getValue.substring(0, 1) + String.format("%0"+1+"d", 0); } else { return String.valueOf(value).split("[.]")[0] +"." + getValue.substring(0, 2); } } 1 public String getDecimalNumber(String number) { Double d=Double.parseDouble(number); return String.format("%.5f", d);
}Take care of NumberFormatException as well