07. januar 2003 - 23:08Der er
16 kommentarer og 3 løsninger
string to double
Atter et lille spørgsmål fra de to blondiner. Vi bruger bufferReader i vores UI til at få et navn og en pris på en bog. Problemet er bare, at begge dele bliver automatisk til en String, når vi bruger bufferreader. Vi vil gerne have a prisen bliver til en double. Vi troede vi havde løst det med følgende kode:
Den laver en fejl ved Double.parseFloat når vi kompiler koden. Den skriver cannot resolve symbol og melder fejlen ved punktumet mellem Double og parseFloat.
symbol: method parseFloat (java.lang.String) location: class java.lang.Double
eagleeye >> Når vi kører dit eksempel, kan vi godt kompile, men når vi inde i programmet skal skrive et komme tal f.eks. 12.5, så kommer denne fejl inde i koden:
Exception in thread "main" java.lang.NumberFormatException: 12.5 at java.lang.Integer.parseInt(Integer.java:435) at java.lang.Integer.valueOf(Integer.java:532) at UserInterface.Menu(UserInterface.java:50) at RunMe.main(RunMe.java:5) Press any key to continue...
Før vi prøvede koden fra eagleeye havde vi ikke lavet denne: import java.lang.*; men vi har nu prøvet at importere det, og den forgående fejl kommer stadig...det er lidt underligt...
Denne her virker: /* * test.java * * Created on 7. januar 2003, 23:56 */ import java.lang.*; /** * * @author Administrator */ public class test { double doublebogPris=0; String bogP="12.5";
/** Creates a new instance of test */ public test() { try { doublebogPris = Double.parseDouble(bogP); } catch(NumberFormatException e) { //det var ikke en gyldig double i String } System.out.println("Prisen som double er = "+doublebogPris); }
/** * @param args the command line arguments */ public static void main(String[] args) { new test(); }
Hvis man skal konvertere en String til en double, skal man først konvertere sin String til et Double objekt og dernæst konvertere Double objektet til en double datatype:
public class test { public static void main (String[] args) { System.out.print("Indtast prisen: "); String bogP = inputbogPris.readLine(); try { double bogPris = Double.valueOf(bogP.trim()).doubleValue(); System.out.println("double bogPris = " + bogPris); } catch (NumberFormatException nfe) { System.out.println("NumberFormatException: " + nfe.getMessage()); } } }
disky -> Min programmeringserfaring der er ikke er større end et halvt C-niveau på HTX giver mig desværre ikke anledning til at vurdere om det er bedst at bruge:
Faktisk er den nedeste metode dobbelt konfekt, da den øverste faktisk .trim()'er helt af sig selv :)
Men pyt med de 8 point, jeg har ca 72000 af dem så jeg mangler ikke lige :)
Synes godt om
Slettet bruger
08. januar 2003 - 12:17#16
parseDouble() returnere det samme som valueOf ville have gjort (jvf. java api for Double klassen). De "trimmer" begge to, så at bruge trim() er redundant.
Til gengæld er parseDouble() den hurtigste metode, hvilket nedenstående program illustrerer:
import java.lang.*;
public class inputdata { private static final int count = 1000000; public static void main(String[] args) { String test="455.66667"; try { long begin = System.currentTimeMillis(); for (int i=0; i< count; i++) { (Double.valueOf(test)).doubleValue(); } long end1 = System.currentTimeMillis() - begin;
begin = System.currentTimeMillis(); for (int i=0; i< count; i++) { Double.parseDouble(test); } long end2 = System.currentTimeMillis() - begin;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.