Te trzy odpowiedzi w zasadzie tylko powielają najlepiej głosowaną odpowiedź opublikowaną kilka lat wcześniej, z pewnością mają wiele pozytywnych opinii.
więc moje kodowanie powinno być podwójne total = Double.parseDouble (string) ;?
TinyBelly 24.04.11
4
@TinyBelly: tak, wygląda na to, że chcesz:double total = Double.parseDouble(jlbTotal.getText());
WhiteFang34
1
@TinyBelly: musisz wyodrębnić część tekstu z ciągu, który chcesz przeanalizować dla podwójnego. Oto jeden ze sposobów, w jaki możesz to zrobić dla swojej sprawy, ale nie mogę zagwarantować, że zadziała we wszystkim: double total = Double.parseDouble(jlbTotal.getText().replaceAll("[^0-9.]", ""));- zasadniczo zastępuje wszystkie znaki, które nie są liczbą lub .są niczym, pozostawiając tylko liczbę i kropkę dziesiętną do przeanalizowania.
WhiteFang34
4
stosowanie podwójnego do obliczania ceny nie jest wskazane.
Bozho 24.04.11
2
Dla zwabionych tutaj podczas wyszukiwania wyniku klasy Doublezamiast doubleużycia typu pierwotnego Double.valueOf(String).
Pshemo
48
Jeśli masz problemy z analizowaniem ciągu do wartości dziesiętnych, musisz zastąpić „,” liczbą do „.”
String number ="123,321";double value =Double.parseDouble( number.replace(",","."));
Nie, String.valueOf (coś) zwraca ciąg znaków reprezentujący coś: jeśli coś jest typem wbudowanym lub jeśli jest Obiektem i ma wartość null, w przeciwnym razie jest to odpowiednik someObject.toString (). Aby uzyskać Double z ciągu, należy to zrobić w drugą stronę, jak pokazano w innych odpowiedziach (Double.valueOf (someString) zwraca Double, a Double.parseDouble (someString) zwraca double).
Johann Petrak
36
double d =Double.parseDouble(aString);
To powinno przekonwertować ciąg aString na podwójne d.
Cytując ponownie cytat z Robertiano powyżej - ponieważ jest to zdecydowanie najbardziej wszechstronna i dostosowana do lokalizacji wersja. Zasługuje na pełny post!
Inna opcja:
DecimalFormat df =newDecimalFormat();DecimalFormatSymbols sfs =newDecimalFormatSymbols();
sfs.setDecimalSeparator(',');
df.setDecimalFormatSymbols(sfs);double d = df.parse(number).doubleValue();
publicstaticdouble convertToDouble(String temp){String a = temp;//replace all commas if present with no commaString s = a.replaceAll(",","").trim();// if there are any empty spaces also take it out. String f = s.replaceAll(" ","");//now convert the string to doubledouble result =Double.parseDouble(f);return result;// return the result}
Na przykład wpiszesz ciąg „4 55,63. 0”, wynikiem będzie podwójna liczba 45563.0
Użycie Double.parseDouble()bez otaczającego try/catchbloku może spowodować, NumberFormatExceptionże wejściowy podwójny ciąg znaków nie będzie zgodny z prawidłowym formatem.
Guava oferuje metodę użyteczną do tego, która zwraca się nullw przypadku, gdy nie można przeanalizować ciągu znaków.
„zwraca 0,0, jeśli nie można przeanalizować napisu” - Javadoc nie obsługuje tego twierdzenia.
Tom
@Tom Zwraca wartość zerową Typ podwójny, który można przekonwertować na typ podwójny 0,0 - DYS 13 sekund temu edycja
DYS
1
Może, ale nie automatycznie, a Twój fragment tego nie robi.
Tom
1
Służy do konwertowania dowolnej liczby ciągów na podwojenie, gdy potrzebujesz int, po prostu przekonwertuj typ danych z num i num2 na int; wziął wszystkie sprawy na dowolny ciąg podwójny z Eng: „Bader Qandeel”
publicstaticdouble str2doubel(String str){double num =0;double num2 =0;int idForDot = str.indexOf('.');boolean isNeg =false;String st;int start =0;int end = str.length();if(idForDot !=-1){
st = str.substring(0, idForDot);for(int i = str.length()-1; i >= idForDot +1; i--){
num2 =(num2 + str.charAt(i)-'0')/10;}}else{
st = str;}if(st.charAt(0)=='-'){
isNeg =true;
start++;}elseif(st.charAt(0)=='+'){
start++;}for(int i = start; i < st.length(); i++){if(st.charAt(i)==','){continue;}
num *=10;
num += st.charAt(i)-'0';}
num = num + num2;if(isNeg){
num =-1* num;}return num;}
Odpowiedzi:
Możesz użyć
Double.parseDouble()
do konwersjiString
nadouble
:W twoim przypadku wygląda to tak, jak chcesz:
źródło
double total = Double.parseDouble(jlbTotal.getText());
double total = Double.parseDouble(jlbTotal.getText().replaceAll("[^0-9.]", ""));
- zasadniczo zastępuje wszystkie znaki, które nie są liczbą lub.
są niczym, pozostawiając tylko liczbę i kropkę dziesiętną do przeanalizowania.Double
zamiastdouble
użycia typu pierwotnegoDouble.valueOf(String)
.Jeśli masz problemy z analizowaniem ciągu do wartości dziesiętnych, musisz zastąpić „,” liczbą do „.”
źródło
Aby przekonwertować ciąg z powrotem na podwójny, spróbuj wykonać następujące czynności
Metoda parseDouble osiągnie pożądany efekt, podobnie jak metoda Double.valueOf ().
źródło
To powinno przekonwertować ciąg aString na podwójne d.
źródło
Zastosowanie
new BigDecimal(string)
. To zagwarantuje prawidłowe obliczenia później.Zasadniczo - zawsze używaj
BigDecimal
do wrażliwych obliczeń, takich jak pieniądze.Przykład:
źródło
Musisz tylko parsować wartości String za pomocą Double
źródło
Cytując ponownie cytat z Robertiano powyżej - ponieważ jest to zdecydowanie najbardziej wszechstronna i dostosowana do lokalizacji wersja. Zasługuje na pełny post!
Inna opcja:
źródło
źródło
Jest też inny sposób.
Double jest klasą, a „temp” jest zmienną. „liczba” to końcowy numer, którego szukasz.
źródło
Tak bym zrobił
Na przykład wpiszesz ciąg „4 55,63. 0”, wynikiem będzie podwójna liczba 45563.0
źródło
Użycie
Double.parseDouble()
bez otaczającegotry/catch
bloku może spowodować,NumberFormatException
że wejściowy podwójny ciąg znaków nie będzie zgodny z prawidłowym formatem.Guava oferuje metodę użyteczną do tego, która zwraca się
null
w przypadku, gdy nie można przeanalizować ciągu znaków.https://google.github.io/guava/releases/19.0/api/docs/com/google/common/primitives/Doubles.html#tryParse(java.lang.String)
Double valueDouble = Doubles.tryParse(aPotentiallyCorruptedDoubleString);
W czasie wykonywania zniekształcone dane wejściowe String są
null
przypisywane dovalueDouble
źródło
Służy do konwertowania dowolnej liczby ciągów na podwojenie, gdy potrzebujesz int, po prostu przekonwertuj typ danych z num i num2 na int; wziął wszystkie sprawy na dowolny ciąg podwójny z Eng: „Bader Qandeel”
źródło
źródło
Możesz użyć double.parseDouble ();
źródło