【问题标题】:Wrong decimal separator returned by DecimalFormatSymbols.getInstance().decimalSeparatorDecimalFormatSymbols.getInstance().decimalSeparator 返回错误的小数分隔符
【发布时间】:2020-11-25 15:06:10
【问题描述】:

基于这个问题:Decimal point or decimal comma in Android 我尝试获取设备中使用的小数分隔符。我正在使用 Kotlin,所以我的代码如下所示:

import android.icu.text.DecimalFormatSymbols

DecimalFormatSymbols.getInstance().decimalSeparator  // function used in onCreate()

此代码返回 , 但在设备上,使用的分隔符例如在 EditText 中是 .。为什么会这样?


我认为它返回错误结果的示例:

import android.icu.text.DecimalFormatSymbols

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        txtSeparator.text = DecimalFormatSymbols.getInstance().decimalSeparator.toString()
        txtTest.text = (1234.5678).toString()
    }
}

为什么第一个 TextView 中的分隔符与第二个 TextView 或 EditText 中的分隔符不同?它发生在某些语言中。在英语中它有效,但例如波兰语没有。

【问题讨论】:

    标签: android kotlin decimal-point


    【解决方案1】:

    txtTest.text = (1234.5678).toString() 行只是告诉虚拟机它应该使用标准的数字到字符串的转换过程,所以它会将一个点作为小数分隔符,如果你使用带有更多小数位的双精度,它甚至会使用科学记数法。相反,您应该查看 Android Developers 的此页面,其中有一些处理数字格式的特定方法:https://developer.android.com/reference/java/text/DecimalFormat

    【讨论】:

    • 但是当设备中的默认分隔符设置为,时,为什么在EditText中我必须使用.而不是,
    • 我不知道你用什么代码来解析来自EditText的值,所以很难预测行为。
    • 我没有使用任何代码。类型为numberDecimalEditText 是正常的。我点击它,键盘显示,我只能添加.作为分隔符。
    • 在这种情况下,试试这个gist.github.com/juniorcesarabreu/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    相关资源
    最近更新 更多