2015-09-23 2 views
1

мне было интересно, если есть существующий метод для преобразования отформатированного номера строки на номер, например, «123,456.78» до 123456.78Преобразовать строки на номер с форматом

В принципе, в отличие от функции DecimalFormat, которая превращает двойную переменную строка, следующая за этим форматом, например, «###, ###. ##». Я хочу реализовать обратную сторону этой функции, которая превращает строку с «###, ###. ##» в double. Есть ли API для этого?

спасибо.

+0

Вы просто хотите преобразовать формат строки вправо? почему бы вам не преобразовать строку в integer или double, используя ** parseInt или valueOf? ** – Jordon

+0

Не будет просто удалять запятые, а затем использовать 'Double.parseDouble()' work? –

+5

Вы проверили [документацию для DecimalFormat] (http://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html) и [свой суперкласс] (http://docs.oracle .com/javase/8/docs/api/java/text/NumberFormat.html), правильно? Вы заметили, что у него есть методы не только 'format', но и' parse', такие как [этот] (http://docs.oracle.com/javase/8/docs/api/java/text/NumberFormat.html # parse-java.lang.String-), правильно? – VGR

ответ

2

Вы должны были просмотреть documentation for DecimalFormat и its superclass. Вы бы обнаружили, что у него есть не только методы format, но и методы parse, такие как this one.

Самый простой способ сделать то, что вы хотите:

NumberFormat format = NumberFormat.getInstance(); 
Number value = format.parse(string); 

// If you specifically want a double... 
double d = value.doubleValue(); 

Вы должны поймать ParseException и борьбы с ним. Как вы это делаете, это зависит от того, что вы хотите сделать, когда ваша строка не представляет действительное числовое значение. Если это пользовательский ввод, вы можете попросить пользователя снова ввести текст.

+0

Спасибо, это тот, о котором я думаю –

2

Вот простой способ сделать это

String number = "20,000,000"; 
    int x = Integer.parseInt(number.replace(",", "")); 
    System.out.println(x); 

Вы просто заменить char's, что не принадлежит к числу с "", а затем разобрать его в примитив.

String number = "20,000,000.56"; 
    DecimalFormat df = new DecimalFormat("#"); 
    df.setMaximumFractionDigits(5); 
    double x = Double.parseDouble(number.replace(",", "")); 
    System.out.println(df.format(x)); 

Это немного отличается для Double, потому что оно отображает экспоненциальный результат, и вам нужно будет это предотвратить. Вышеприведенный код делает это.

df.format(x) 

Возвращает строку, но вы можете бросить его с помощью метода Double.parseDouble


Вот метод, с помощью Regex и метод replace, если у вас есть более чем один разделитель, и вы знаете их все:

Скажем, разделители здесь "-" и ""

double x = Double.parseDouble(number.replace("[-,]", ""); 
+0

OP попросил разобрать на двойной, а не на int. – gla3dr

+0

Это не без API, это использование 'Integer.parseInt' и' String.replace' API. Кроме того, OP уже знает о 'DecimalFormat', который выполняет именно то, что запрашивается, то есть анализирует число с запятыми на double, что ваш ответ не делает. –

+0

@ gla3dr исправлено –

Смежные вопросы