Я хочу преобразовать некоторые числа, которые я получил как строки в парные числа, но эти цифры не в стандартном стандарте США, а в другом. Как я могу это сделать?
Как преобразовать String в Double в Java, используя определенную локаль?
Ответ 1
Попробуйте java.text.NumberFormat
. Из Javadocs:
Чтобы отформатировать номер для другого языка, укажите его в вызове getInstance.
NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH);
Вы также можете использовать NumberFormat для разбора чисел:
myNumber = nf.parse(myString);
parse()
возвращает Number
; поэтому, чтобы получить double
, вы должны вызвать myNumber.doubleValue()
:
double myNumber = nf.parse(myString).doubleValue();
Обратите внимание, что parse()
никогда не вернет null
, поэтому это не может вызвать NullPointerException
. Вместо этого parse
выдает проверочный ParseException
, если он терпит неудачу.
Изменить: Я изначально сказал, что есть другой способ конвертировать в double
: привести результат в double
и использовать unboxing. Я думал, что, поскольку используется универсальный экземпляр NumberFormat
(для Javadocs для getInstance
), он всегда возвращался a double
. Но DJClayworth указывает, что Javadocs для parse(String, ParsePosition)
(который называемый parse(String)
), говорят, что a Long
возвращается, если это возможно. Поэтому листинг результата на double
является небезопасным и не должен быть проверен!
Спасибо, DJClayworth!
Ответ 2
NumberFormat - это путь, но вы должны знать о его особенностях, которые возникают, когда ваши данные менее 100% правильны.
Я нашел следующее полезное:
http://www.ibm.com/developerworks/java/library/j-numberformat/index.html
Если вашему входу можно доверять, вам не о чем беспокоиться.
Ответ 3
Вы используете NumberFormat
. Вот пример, который, на мой взгляд, выглядит правильно.
Ответ 4
Просто обучение Java и программированию. Имел подобный вопрос. В этом учебнике нашлось что-то подобное:
Scanner sc = new Scanner(string);
double number = sc.nextDouble();
В книге говорится, что сканер автоматически расшифровывает то, что в переменном String, и что класс сканера автоматически адаптируется к языку установленного языка Locale, по умолчанию используется локальная система, но это легко установить на что-то еще.
Я решил свою проблему таким образом. Может быть, это может работать для вышеупомянутого вопроса вместо разбора?
Дополнение: Причина, по которой мне понравился этот метод, был тот факт, что при использовании свинг-клавиатур для ввода и затем пытается преобразовать строку в double с синтаксисом, я получил исключение NumberFormatException. Оказалось, что синтаксический анализ исключительно использует форматирование номера США, в то время как Scanner может обрабатывать все форматы. Сканер сделал работу безупречной работы даже с разделителем запятой (,). Поскольку самый проголосовавший ответ использует синтаксический анализ, я действительно не понимаю, как он решит эту конкретную проблему. Вам придется вводить ваши номера в формате США, а затем конвертировать их в формат локали. Это довольно неудобно, когда в числовом ключевом слове установлена запятая.
Теперь вы можете свободно раскалывать меня на куски;)
Ответ 5
Это не должно быть проблемой при использовании java.text.DecimalFormat.
Ответ 6
Использовать NumberFormat.getNumberInstance(Locale)
Ответ 7
Знаете ли вы, какой язык это? Затем вы можете использовать
DecimalFormat format = DecimalFormat.getInstance(theLocale);
format.parse(yourString);
это даже будет работать для научных обозначений, строк с процентными знаками или строками с символами валюты.
Ответ 8
Вот как вы используете parseDouble
для преобразования String
в Double
:
doubleExample.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class doubleExample {
public static void main(String[] args) {
Double myDouble = new Double("0");
System.out.println("Please enter a number:");
try
{
//get the number from console
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
myDouble = Double.parseDouble(br.readLine());
}
//if invalid value was entered
catch(NumberFormatException ne)
{
System.out.println("Invalid value" + ne);
System.exit(0);
}
catch(IOException ioe)
{
System.out.println("IO Error :" + ioe);
System.exit(0);
}
System.out.println("Double value is " + myDouble);
}
}