How to print a double with two decimals in Android? [duplicate]
Asked Answered
O

5

119

Maybe this is a silly question, but I cannot guess how to solve it if it's not creating a method. Maybe there's a "natural way" to do it, like in C for example. Here's the problem:

I have a var:

double a;

And I want to show it only with 2 or 3 decimals. When I try to show it:

Text.setText("Value of a: " + String.valueOf(a));

It gives something like:

Value of a: 5.234966145

And i would want just

Value of a: 5.23

Without changing the real value of a so it shows the approximate number but works with the real number.

Olympic answered 9/11, 2011 at 12:35 Comment(2)
doubleNumber.toString().substring(0, 3)Husbandry
input?.let { if (input == "0" || input == "0.0") { return "0.00" } return try { val formatter = DecimalFormat("#,###,###.00") formatter.format(input.toDouble()) } catch (e: Exception) { it } }Monnet
M
230
yourTextView.setText(String.format("Value of a: %.2f", a));
Mannerless answered 9/11, 2011 at 12:39 Comment(2)
This gives a warning: "Implicitly using the default locale is a common source of bugs: Use String.format(Locale, ...) instead"Dibru
@Dibru that's because of variable symbols used in different countries. Even if you specify the correct formatting, you have to do the same if you parse it later. If you aren't doing that, it doesn't matter AT ALL because it uses the system settings of the device, which you should use anyway.Shererd
T
53

For Displaying digit upto two decimal places there are two possibilities - 1) Firstly, you only want to display decimal digits if it's there. For example - i) 12.10 to be displayed as 12.1, ii) 12.00 to be displayed as 12. Then use-

DecimalFormat formater = new DecimalFormat("#.##"); 

2) Secondly, you want to display decimal digits irrespective of decimal present For example -i) 12.10 to be displayed as 12.10. ii) 12 to be displayed as 12.00.Then use-

DecimalFormat formater = new DecimalFormat("0.00"); 
Tetzel answered 7/1, 2016 at 13:33 Comment(1)
This will format "0" as ".00". Instead use new DecimalFormat("0.00") to display "0" as "0.00"Hoye
T
47

You can use a DecimalFormat, or String.format("%.2f", a);

Teneshatenesmus answered 9/11, 2011 at 12:40 Comment(0)
S
36

Before you use DecimalFormat you need to use the following import or your code will not work:

import java.text.DecimalFormat;

The code for formatting is:

DecimalFormat precision = new DecimalFormat("0.00"); 
// dblVariable is a number variable and not a String in this case
txtTextField.setText(precision.format(dblVariable));
Semiweekly answered 8/8, 2014 at 17:15 Comment(2)
Your code shows rounded values. For example, it shows 2.82 by calling precision.format(2.81666666)...Montemayor
which is the desired behavior, isn't it?Plate
R
8
textView2.setText(String.format("%.2f", result));

and

DecimalFormat form = new DecimalFormat("0.00");
         textView2.setText(form.format(result) );

...cause "NumberFormatException" error in locale for Europe because it sets result as comma instead of point decimal - error occurs when textView is added to number in editText. Both solutions are working excellent in locale US and UK.

Rodney answered 25/7, 2014 at 21:51 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.