DecimalFormatSymbols.getInstance().decimalSeparator возвращает неверный десятичный разделитель.

Основываясь на этом вопросе: Десятичная точка или десятичная запятая в 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? Это происходит на некоторых языках. На английском это работает, но, например. на польском нет.


person iknow    schedule 05.08.2020    source источник


Ответы (1)


Строка txtTest.text = (1234.5678).toString() просто сообщает виртуальной машине, что она должна использовать стандартный процесс преобразования числа в строку, поэтому она поставит точку в качестве десятичного разделителя и, если вы используете двойное число с большим количеством десятичных знаков, она даже будет использовать научную запись . Вместо этого вам следует взглянуть на эту страницу от разработчиков Android, где есть конкретные методы работы с форматированием чисел: https://developer.android.com/reference/java/text/DecimalFormat

person MrPNG    schedule 05.08.2020
comment
Но почему в EditText я должен использовать . вместо ,, когда разделитель по умолчанию в устройстве установлен на ,? - person iknow; 05.08.2020
comment
Я не знаю, какой код вы используете для анализа значения из EditText, поэтому трудно предсказать поведение. - person MrPNG; 05.08.2020
comment
Я не использую никакого кода. Обычно это EditText с типом numberDecimal. Я нажимаю на нее, появляется клавиатура, и я могу добавить только . в качестве разделителя. - person iknow; 05.08.2020
comment
В этом случае попробуйте этот gist.github.com/juniorcesarabreu/ - person MrPNG; 05.08.2020