[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

how to parse string to double upto two decimal digits

Posted on 2013-05-22
7
Medium Priority
?
556 Views
Last Modified: 2013-07-02
Parse string to double returns me the double value upto one decimal digit.
How to get the double value upto two decimal digits. I want it to be 1.00and not 1.0

String Amt = "1.00";
Double Price = Double.parseDouble(Amt);

Ouput:- 1.0
0
Comment
Question by:Newton21205
7 Comments
 
LVL 86

Assisted Solution

by:CEHJ
CEHJ earned 1000 total points
ID: 39189357
Numbers (double/Double in your case) don't have formats, so you have what is known as a 'category error'. Only strings have formats
0
 
LVL 17

Expert Comment

by:krakatoa
ID: 39189360
import java.text.*;
import java.math.*;


class DecFormat {

static DecimalFormat df;
static BigDecimal bd;
static Number num;
static Double d;
static Float dd;

static final double FNUM = 123456.00;




	public static void main(String[] args){


double dub = 12345678.00;
DecimalFormat def = new DecimalFormat();

def.applyPattern("##,###,###.##;(##,###,###.##)");

def.setMinimumFractionDigits(2);

//def.setRoundingMode(RoundingMode.valueOf("HALF_DOWN") );//cant get this to work

System.out.print(def.format(dub));

System.exit(0);
		DecimalFormat f = new DecimalFormat("###########0.00");
		
		df = new DecimalFormat();
		//df = new DecimalFormat();
		//df.setMinimumFractionDigits(2);
				
		//df.applyPattern("##,###,###.00;(##,###,###.00)");
		

				//df.setRoundingMode(RoundingMode.valueOf("UNNECESSARY") );

		//num = df.parse("12345678.00",new ParsePosition(0));
		//num = f.parse("12345678.00",new ParsePosition(0));
num = f.parse("123456.00",new ParsePosition(0));
Float fl = new Float(num.floatValue());				
		System.out.println(fl);
		

	}


}

Open in new window

0
 
LVL 86

Expert Comment

by:CEHJ
ID: 39189369
String Amt = "1.00";
double d = Double.parseDouble(Amt); // Don't use capitals for variable names in Java
String amt = String.format("%.2f", d);
System.out.println(amt); // But it's now a String again

Open in new window

0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 

Author Comment

by:Newton21205
ID: 39189588
@CEHJ : i want a double not a string
0
 
LVL 36

Expert Comment

by:mccarl
ID: 39189718
What CEHJ is saying and trying to point out to you, is that a "double" has NO concept of "number of decimal places", ie. 1.00 = 1.0 = 1.00000000 = etc, etc. It is ONLY when it is converted to a String either explicitly using String.format, etc or implicitly (see below) that the number of decimal places that you want included in the String is important.

What do I mean by "converted implicitly" above? Well, in your original question, the last line says, Output:- 1.0. How did you get to that conclusion? I am assuming that at some point you did something along the lines of, System.out.println(Amt);??? If so, then in that one line, an implicit conversion to a String occurs. It has to because to write to the console, which is just a stream of characters, a number such as Amt needs to be converted to it's textual representation. "System.out" is actually a PrintStream object, and if you follow the trail of Javadoc references for the PrintStream .println(double) method, you will see those references describing this implicit conversion and ending up at Double.toString(double). If you read the description of the method in that Javadoc you will see why it printed "1.0" to the console.


So, what should YOU do then? Well, just use your Double everywhere that you need to representation a decimal number (of any number of decimal places), ie. add it to others, subtract, multiply, divide, whatever you want to do with it. And then AFTER you do all your mathematical operations, and you then want to print the result to the console, that's when you use the last two lines of CEHJ's post to "explicitly" convert the result to a String (that way YOU control the number of decimals included) and then print the String to the console.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 39190284
@CEHJ : i want a double not a string
What is the mathematical difference between 1.0 and 1.00? Answer: there isn't one, which is why a number has no need of, and no means of, distinguishing between the two.
0
 
LVL 17

Accepted Solution

by:
krakatoa earned 1000 total points
ID: 39190351
I posted the wrong code above, so for the record, this is what I meant to post :

String du = "12345678.00";
double dub = new Double(du);//12345678.00;
DecimalFormat def = new DecimalFormat();

def.applyPattern("##,###,###.00;(##,###,###.00)");

System.out.print(def.format(dub));

Open in new window

0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

An old method to applying the Singleton pattern in your Java code is to check if a static instance, defined in the same class that needs to be instantiated once and only once, is null and then create a new instance; otherwise, the pre-existing insta…
By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
This video teaches viewers about errors in exception handling.
This tutorial will introduce the viewer to VisualVM for the Java platform application. This video explains an example program and covers the Overview, Monitor, and Heap Dump tabs.
Suggested Courses
Course of the Month18 days, 19 hours left to enroll

834 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question