Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 445
#1

Десятичный разделитель - Программирование Android

02.10.2013, 10:04. Просмотров 1856. Ответов 12
Метки нет (Все метки)

Скажите, у андроида десятичный разделитель всегда точка?
Если нет, то как получить его значение?
Искал что-то вроде DecimalSeparator, но не нашел.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2013, 10:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Десятичный разделитель (Программирование Android):

Добавить разделитель в список дат - Программирование Android
Помогите пожалуйста, есть список с именами и датами, сортированы по датам. Хочу добавить разделители типа MM/yyyy, а какую сторону копать?

Как сменить системные параметры: десятичный разделитель и разделитель в дате? - MS Access
Как сменить системные параметры: 'десятичный разделитель' и 'разделитель в дате'? Подозреваю, что с помощью API-функций. Хотелось...

Десятичный разделитель - Firebird/InterBase
Командой insert вставляю строку в таблицу, одно из полей которой имеет тип Double Precision. Если в системе стоит в качестве десятичного...

Заменить десятичный разделитель - MySQL
вытаскиваю значения поля из 1с, оно может быть дробное и в качестве десятичного разделителя используется запятая, а mysql использует точку...

Десятичный системный разделитель - C++ Builder
Здравствуйте товарищи (господа) специалисты! Прошу помощи в решении вопроса любителю. Есть программа на Билдер 5. Она содержит...

Десятичный разделитель в AutoCAD - VBA
Добрый день. Возникла проблема при передаче десятичного разделителя в AutoCAD на разных компьютерах. Передаются дробные значения, при...

12
verylazy
Заблокирован
02.10.2013, 10:18 #2
Цитата Сообщение от Slon747 Посмотреть сообщение
Искал что-то вроде DecimalSeparator, но не нашел.
не верю (с)
http://developer.android.com/referen...atSymbols.html

Java
1
2
DecimalFormat f = (DecimalFormat) DecimalFormat.getInstance();
System.out.println(f.getDecimalFormatSymbols().getDecimalSeparator());
0
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 445
02.10.2013, 10:36  [ТС] #3
Цитата Сообщение от verylazy Посмотреть сообщение
не верю (с)
http://developer.android.com/referen...atSymbols.html

Java
1
2
DecimalFormat f = (DecimalFormat) DecimalFormat.getInstance();
System.out.println(f.getDecimalFormatSymbols().getDecimalSeparator());
Как-то странно работает.
Изначально я выяснил, что преобразование из String в Double у меня возможно, если разделитель точка.
Сделал ф-ю, преобразовывающую строку в число (сейчас добавил функциональность getDecimalSeparator()):
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static double StrToDouble(String str) {
 
        if (str == null || str.isEmpty())
            return 0;
        
        DecimalFormat f = (DecimalFormat) DecimalFormat.getInstance();
        String DecimalSeparator = String.valueOf(f.getDecimalFormatSymbols().getDecimalSeparator());        
        
        str = str.replace(".", DecimalSeparator);
        str = str.replace(",", DecimalSeparator);
        
        double result = 0;
 
        try {
            result = Double.parseDouble(str);
        } catch (Exception e) {
        }
 
        return result;
    }
Но теперь у меня переменная DecimalSeparator получает значение "," и соответственно не происходит правильное преобразование.
0
verylazy
Заблокирован
02.10.2013, 11:20 #4
проверил, так вроде работает, точка, запятая - проходит
Java
1
2
3
4
5
6
7
8
9
10
        String str = "3,14";
        DecimalFormat df = new DecimalFormat("#.#", DecimalFormatSymbols.getInstance());
        DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.getDefault());
        str = str.replaceAll("[,.]", String.valueOf(symbols.getDecimalSeparator()));
        double d = 0;
        try {
            d = (Double) df.parse(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
1
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 445
02.10.2013, 12:25  [ТС] #5
Спасибо,
Так работает.

Добавлено через 28 минут
Вы конечно будете смеяться, но с "1,00" такое уже не работает
0
verylazy
Заблокирован
02.10.2013, 14:00 #6
Я конечно попробую переделать, мне интересно пробовать новые штучки, которые я не знаю.

Меня терзают сомнения в целесообразности такого подхода.
Кашпировский во мне подсказывает, что в некий EditText пользователь вводит данные, которые потом парсятся.
Если так, то я бы делал проверку корректности ввода раньше, на этапе ввода чисел в поле. Тогда не будет городить кучу проверок в коде.
0
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 445
02.10.2013, 14:13  [ТС] #7
Цитата Сообщение от verylazy Посмотреть сообщение
Я конечно попробую переделать, мне интересно пробовать новые штучки, которые я не знаю.

Меня терзают сомнения в целесообразности такого подхода.
Кашпировский во мне подсказывает, что в некий EditText пользователь вводит данные, которые потом парсятся.
Если так, то я бы делал проверку корректности ввода раньше, на этапе ввода чисел в поле. Тогда не будет городить кучу проверок в коде.
Java
1
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.getDefault());
symbols принимает "," тогда как Double.parseDouble() отрабатывает только если разделитель точка.
Да, возможно изначально подход не верный.
У элементов EditText я выставил
XML
1
android:inputType="numberDecimal"
и пользователь не введет некорректное значение.
Но для удобства я вывожу в элементы текст с двумя десятичными знаками:
Java
1
txtPrice.setText(String.format("%.2f", price));
при этом он выводится с запятой а не с точкой. Потому и при получении занимаюсь парсингом.
0
verylazy
Заблокирован
02.10.2013, 14:35 #8
а если так?
Java
1
2
3
4
5
6
7
8
9
10
        String str = "3,14";
        DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.getDefault());
        str = str.replaceAll("[,.]", String.valueOf(symbols.getDecimalSeparator()));
        double n = 0;
            try {
                n = nf.parse(str).doubleValue();
            } catch (ParseException e) {
                e.printStackTrace();
            }
        System.out.println(n);
0
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 445
02.10.2013, 14:47  [ТС] #9
Цитата Сообщение от verylazy Посмотреть сообщение
а если так?
Java
1
2
3
4
5
6
7
8
9
10
        String str = "3,14";
        DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.getDefault());
        str = str.replaceAll("[,.]", String.valueOf(symbols.getDecimalSeparator()));
        double n = 0;
            try {
                n = nf.parse(str).doubleValue();
            } catch (ParseException e) {
                e.printStackTrace();
            }
        System.out.println(n);
а что за объект "nf"?
0
verylazy
Заблокирован
02.10.2013, 14:50 #10
NumberFormat nf = NumberFormat.getInstance();
затупил че-то я
0
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 445
02.10.2013, 15:10  [ТС] #11
Java
1
n = nf.parse(str).doubleValue();
приводит к ошибке даже это "nf.parse(str)" и даже с целыми числами.

Причем symbols.decimalSeparator указывает на знак запятая.
Но я решил не заморачиваться. Думаю сделать свою ф-ю для получения разделителя через преобразование строки в double (завернув в try-catch), после чего уже парсить как нужно.
Но у меня подозрение, а что если "Double.parseDouble" должен принимать строку с разделителем запятая, не зависимо от региональных настроек?
0
verylazy
Заблокирован
02.10.2013, 15:25 #12
у меня код
Java
1
2
3
4
5
6
7
8
9
10
11
        String str = "3.14";
        DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.getDefault());
        NumberFormat nf = NumberFormat.getInstance();
        str = str.replaceAll("[,.]", String.valueOf(symbols.getDecimalSeparator()));
        double n = 0;
            try {
                n = nf.parse(str).doubleValue();
            } catch (ParseException e) {
                e.printStackTrace();
            }
        System.out.println(n);
работает во всех комбинациях, точки или запятые, целые и не очень числа
1
Slon747
59 / 37 / 1
Регистрация: 24.08.2013
Сообщений: 445
02.10.2013, 15:48  [ТС] #13
Цитата Сообщение от verylazy Посмотреть сообщение
у меня код
Java
1
2
3
4
5
6
7
8
9
10
11
        String str = "3.14";
        DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.getDefault());
        NumberFormat nf = NumberFormat.getInstance();
        str = str.replaceAll("[,.]", String.valueOf(symbols.getDecimalSeparator()));
        double n = 0;
            try {
                n = nf.parse(str).doubleValue();
            } catch (ParseException e) {
                e.printStackTrace();
            }
        System.out.println(n);
работает во всех комбинациях, точки или запятые, целые и не очень числа
Да, все так работает. Просто у меня в таком виде компилятор не пропускает, а я не правильно обрабатывал исключит. ситуацию.
Вот такая концовка у меня работает:
Java
1
2
3
4
5
6
7
8
9
                try {
                    try {
                        n = nf.parse(str).doubleValue();
                    } catch (java.text.ParseException e) {
                        e.printStackTrace();
                    }
                } catch (ParseException e) {
                    e.printStackTrace();
                }
Спасибо
0
02.10.2013, 15:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2013, 15:48
Привет! Вот еще темы с ответами:

Lexical_cast и десятичный разделитель - Boost C++
Можно ли как то задать десятичный разделитель что бы кастовалось число записанное с разделителем "запятой" а не точкой ? #include...

Sql loader и десятичный разделитель - Oracle
Доброго времени суток. С oracale-ом я начинающий и хотел бы услышать совета более опытных людей. При загрузке sqlloader-ом бывает...

Десятичный разделитель и INI-файлы - C++ Builder
- Здравствуйте завсегдатаи. С прошедшими и наступающими Вас праздниками! Помогите пожалуйста разобраться с одним вопросом. Мое...

Удалить десятичный разделитель из чила - C#
Ребят,как сделать если число "3," и после разделителя ничего нет,то удалить этот разделитель???


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.