Java / Android, problem med decimalpunkt/decimalkomma

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
SeniorLemuren
Inlägg: 8388
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Java / Android, problem med decimalpunkt/decimalkomma

Inlägg av SeniorLemuren »

Jag har följt ett exempel på youtube där man tillverka en enkel "TipCalculator". Den funkar alldeles Ok. om jag testar den i "viritual device emulator", men när jag kör den i min mobil funkar det inte. Problemet uppstår när man med hjälp av en seekbar vill ändra på ett numeriskt värde.

Kod: Markera allt

public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
						
			tipAmount = (tipSeekBar.getProgress()) * .01;
			tipAmountET.setText(String.format("%.02f", tipAmount));
			uppdateTipAndFinalBill();
			
		}
När jag kör i emulatorn så läggs decimaltalet in i tipAmount med decimalpunkt, men i min mobil blir det ett decimalkomma (förmodligen för att den är svensk). Emulatorn är inställ på engelska. När jag sedan gör uppdateTipAndFinalBill() så skiter det sig.

Kod: Markera allt

private void uppdateTipAndFinalBill() {
		double tipAmount = Double.parseDouble(tipAmountET.getText().toString());
		double finalBill = billBeforeTip + (billBeforeTip * tipAmount);
		finalBillET.setText(String.format("%.02f",finalBill));
Hur löser man detta? Jag vill ju att programmet skall funka i den Svenska mobilen.
Zeela
Inlägg: 176
Blev medlem: 28 augusti 2008, 11:23:49
Ort: Åtvidaberg
Kontakt:

Re: Java / Android, problem med decimalpunkt/decimalkomma

Inlägg av Zeela »

Istället för
Double.parseDouble(x);
bör du använda
NumberFormat.parse

Läs mer här:
http://developer.android.com/reference/ ... ormat.html
Användarvisningsbild
SeniorLemuren
Inlägg: 8388
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Java / Android, problem med decimalpunkt/decimalkomma

Inlägg av SeniorLemuren »

Tack, men jag är helgrön på java än så länge, så länken du gav mig sade inte så mycket. Problemet ser ut som följer:
När jag startar appen så har jag ett startvärde 0.15 inlagt i "strings.xml"

Kod: Markera allt

<string name="tip_text_view">Tip</string>
<string name="tip_edit_text">0.15</string>

I fältet Tip har jag en decimalpunkt i talet 0.15 vid initieringen.
tipcalc1.jpg
När jag sedan drar seekBar åt vänster för att öka värdet så blir det fortfarande en decimalpunkt i Tip-fältet:
tipcalc2.jpg
När jag sedan testar programmet i min svenska mobil så är det helt riktigt en decimalpunkt i Tip-fältet vid start av programmet eftersom jag lagt in det som startvärde. När jag sedan drar seekBar åt vänster så byts decimalpunkten ut mot ett komma. Det gör ju naturligtvis att programmet kraschar.

Eftersom "uppdateTipAndFinalBill() " funkar med det initiala värdet 0.15 även i mobilen så borde felet uppstå här.
Här formateras talet med decimalkomma i den Svenska mobilen och en decimalpunkt i den Engelska verkar det som.

Kod: Markera allt

tipAmountET.setText(String.format("%.02f", tipAmount));	
I och för sig kan man kanske gå runt problemet genom att visa procent som heltal i stället för decimalvärdet i Tip-fältet ock sedan dividera med tipAmount med 100 när man räknar ut slutsumman.

Men jag vill ju gärna förstå hur det funkar. det kan ju uppstå andra situationer där man får problem med att vi Svenska evetnas med att använda decimalkomma i stället för decimalpunkt. Borde det inte gå att tala om för appen vilket som skall gälla, decimalkomma eller decimalpunkt?
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
sodjan
EF Sponsor
Inlägg: 43245
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Java / Android, problem med decimalpunkt/decimalkomma

Inlägg av sodjan »

Utan att kunna detaljerna, så brukar det vara så dessa sammanhang att
formatet hämtas från de lokala inställningarna ("locale").

Googling på "string.format change decimal separator android" gav bl.a:
http://stackoverflow.com/questions/5236 ... or-in-java
Användarvisningsbild
SeniorLemuren
Inlägg: 8388
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Java / Android, problem med decimalpunkt/decimalkomma

Inlägg av SeniorLemuren »

Japp, detta gjorde susen. Nu funkar det även i mobilen.:)

Kod: Markera allt

protected void onCreate(Bundle savedInstanceState) {
		
        Locale.setDefault(new Locale("en", "US"));
.
.
.
}
sodjan
EF Sponsor
Inlägg: 43245
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Java / Android, problem med decimalpunkt/decimalkomma

Inlägg av sodjan »

Är inte rätt väg egentligen att anpassa även den första utskriften
av 0.15 till den lokala (d.v.s användarens) standard? Jag fick intrycket
av att 0.15 var hårdkodat och inte "lokaliserat", så att säga. Det borde
gå att köra även 0.15 genom String.format() för att få "rätt" format.
Användarvisningsbild
SeniorLemuren
Inlägg: 8388
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Java / Android, problem med decimalpunkt/decimalkomma

Inlägg av SeniorLemuren »

Helt riktig.
Skriv svar