Kullanıcının 45.60
(Amerikan Doları için örnek) gibi bir sayı girmesini sağlayan basit bir EditText
var. dolayısıyla Locale.getDefault()
ABD yerel dönmelidir (ve öyle) - Bazı para birimi dizeleri için NumberFormat.parse() başarısız oluyor
public String format() {
NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.getDefault());
return formatter.format(amount.doubleValue());
}
Ve Android telefonumda
, dil İngilizce (ABD) olarak ayarlanır: Sonra aşağıdaki yöntemi kullanarak bu sayıyı biçimlendirmek.Şimdi düzenleme metni şu şekilde güncellenir: $45.60
(bu nedenle girilen numarayı biçimlendirmek çalışır).
Ben aşağıdaki yöntemi kullanarak yukarıdaki dize "$45.60"
ayrıştırmak girişiminde Ancak eğer:
NumberFormat numberFormat = NumberFormat.getInstance(Locale.getDefault());
Number result = numberFormat.parse("$45.60");
Bu başarısız: Ben bu "45.60"
biçimlendirme, İngilizce/İngiltere'ye Telefonumu ayarlarsanız
java.lang.IllegalArgumentException: Failed to parse amount $45.60 using locale en_US.
"£45.60"
için doğru şekilde çalışıyor (ABD'de olduğu gibi), ancak yukarıdaki ABD örneğinde olduğu gibi "£45.60"
ayrıştırılıyor.
Ancak, telefonumu Almanca (Almanya) olarak ayarlıyorum, "45,60"
biçimlendirmesini "45,60€"
doğru şekilde çalışıyor, VE ayrıştırma "45,60€"
düzgün çalışıyor!
Bu üç para birimi arasında gördüğüm tek fark: Avro, miktara eklenirken, Dolar ve Pound miktara eklenir.
Herkesin bir fikri var, neden aynı kod Euro için çalışıyor, ancak Pound ve Dolar için değil? Bir şey mi eksik?
public void testCreateStringBased() throws Exception {
// For German locale
CurrencyAmount amount = new CurrencyAmount("25,46€", Locale.GERMANY);
assertEquals(25.46, amount.getAsDouble());
// For French locale
amount = new CurrencyAmount("25,46€", Locale.FRANCE);
assertEquals(25.46, amount.getAsDouble());
// For US locale
amount = new CurrencyAmount("$25.46", Locale.US);
assertEquals(25.46, amount.getAsDouble());
// For UK locale
amount = new CurrencyAmount("£25.46", Locale.UK);
assertEquals(25.46, amount.getAsDouble());
}
CurrencyAmount
temelde ben o verilen yerel yerine varsayılan yerel alması haricinde, döviz dizeleri ayrıştırma için yayınlanan kod sarar:
Buna 'acımasızca amatörüm' demezdim. Özellikle EditText'in girdisini ayrıştırırken yaygın bir kullanım durumudur. Ayrıca doğrudan doğruya (w/para birimi) formatı doğrudan EditText'te (TextWatcher kullanarak) uygulamayı düşündüm, ancak bu çözümü kullanıcı için daha az müdahaleci olarak kullanıyorum. Teşekkürler. – pkk