Android中的小数点或小数逗号

Posted

技术标签:

【中文标题】Android中的小数点或小数逗号【英文标题】:Decimal point or decimal comma in Android 【发布时间】:2012-01-01 13:18:27 【问题描述】:

如果语言集使用小数点逗号或小数点,是否有一种简单的回读方法?

【问题讨论】:

您当前的“选择的答案”是一个用户在这个线程中窃取了其他人的答案并只是复制粘贴到他的帖子中。我鼓励你纠正这个问题,这样这样的恶意行为就不会在 *** 上得到奖励。这是被盗的原始答案:***.com/a/52581208/2057171 【参考方案1】:

编辑:根据@Algar 的建议进行更新;可以直接使用:

char separatorChar = DecimalFormatSymbols.getInstance().getDecimalSeparator();

因为它总是会返回一个DecimalFormatSymbols 的实例。


NumberFormat nf = NumberFormat.getInstance();
if (nf instanceof DecimalFormat) 
    DecimalFormatSymbols sym = ((DecimalFormat) nf).getDecimalFormatSymbols();
    char decSeparator = sym.getDecimalSeparator();

文档:

NumberFormatDecimalFormatDecimalFormatSymbols

根据 DecimalFormat 文档,显然调用 NumberFormat.getInstance() 是安全的,但可能会返回 DecimalFormat 以外的子类(我看到的另一个选项是 ChoiceFormat)。我相信在大多数情况下,它应该是 DecimalFormat,然后您可以将 decSeparator,. 进行比较,看看它使用的是哪种格式。

【讨论】:

我需要将nf 转换为DecimalFormat ((DecimalFormat)nf).getDecimalFormatSymbols(),非常感谢。 感谢@SelçukCihan,我已经编辑了答案以包含所需的演员表! @kcoppock 不,你没有:) @rozina 嘿,现在怎么样? :)【参考方案2】:

或者为什么不

DecimalFormatSymbols.getInstance().decimalSeparator

【讨论】:

好主意!我已将其合并到上面接受的答案中。 @KevinCoppock 你不觉得拿别人的答案比你的好,然后把它复制粘贴到你的主要答案中,这样你就得到了赞成票,而不是有点奇怪回答者? @AlbertRenshaw 这肯定是一个经典的公爵举动:)【参考方案3】:

我试过了,效果很好……

    String osVersion = System.getProperty("os.version");
String PhoneModel = android.os.Build.MODEL;
String locale = this.getResources().getConfiguration().locale.getDisplayCountry();
char decSeparator = '*';
DecimalFormatSymbols dfs = new DecimalFormatSymbols();
decSeparator = dfs.getDecimalSeparator();
String androidVersion = android.os.Build.VERSION.RELEASE;
String prologue = String.format("OS verson = %s PhoneModel = %s locale = %s DecimalFormatSymbol = [%c] androidVersion = %s ", 
        osVersion ,PhoneModel, locale, decSeparator,androidVersion);

【讨论】:

【参考方案4】:

你可以使用:

Currency currency = Currency.getInstance(device_locale);

而不是使用currency.getSymbol() 作为符号。对于默认设备区域设置,您可以使用:

@TargetApi(Build.VERSION_CODES.N)
    public static Locale getCurrentLocale(Context c) 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) 
            return c.getResources().getConfiguration().getLocales().get(0);
         else 
            //noinspection deprecation
            return c.getResources().getConfiguration().locale;
        
    

【讨论】:

【参考方案5】:

不确定是否有简单的方法,但您可以测试正在使用哪种语言集,然后根据该语言使用逗号还是小数进行适当的更改。

【讨论】:

语言和小数点分隔符是两个不同的问题。此外,您不太可能列出所有现有语言。

以上是关于Android中的小数点或小数逗号的主要内容,如果未能解决你的问题,请参考以下文章

从 Rails 中的整数或小数中去除逗号

Android - 逗号作为数字键盘上的小数分隔符

为啥 Android 的 NumberFormat 使用逗号作为澳大利亚的小数分隔符?

iOS开发海外语言逗号和小数点颠倒的问题含千位分隔符

使用 VBA 将逗号小数转换为句点小数

使用逗号作为带有 MvvmCross 的 android EditText 的小数分隔符