Разобрать строку для float/double

Я получаю значения из jTable и помещаю их в свою базу данных (MySQL). В моей таблице БД есть двойной столбец PAYMENT. Когда я пытаюсь поместить значения из моего jTable, возникает проблема:

String payment=(String) jTable1.getValueAt(row, 2);
double pay=double .parseDouble (payment);
........
pst.setDouble(3, zar);

Я получаю это исключение:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "84,21834324"

Как я могу поместить этот столбец из jTable как двойной в моей таблице БД? P.S.: Я тоже пробовал с поплавком.

Вы знаете, что виновником является ,, верно?

lealceldeiro 09.05.2019 13:33

Да, и я предполагаю, что он ожидает точку.

Borislav Stefanov 09.05.2019 13:34

@SirFartALot Абсолютно ничего с этим постом.

Borislav Stefanov 09.05.2019 13:35

Что такое «зар» в высказывании pst.setDouble(3, zar); ? Это какая-то другая строка или двойное значение

Eritrean 09.05.2019 13:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
4
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Замените , на .:

String payment = (String) jTable1.getValueAt(row, 2);
double pay = Double.parseDouble(payment.replace(",". "."));
........
pst.setDouble(3, zar);

Изменить. Если вы хотите поддерживать более сложные значения:

import java.util.Locale;
import java.text.*;

class Main {
  public static void main(String[] args) throws ParseException {
    String v1 = "84,21834324";
    String v2 = "1.234.567,89";

    NumberFormat format = NumberFormat.getInstance(Locale.ENGLISH);
    Number n1 = format.parse(v1);
    Number n2 = format.parse(v2);

    double d1 = n1.doubleValue();
    double d2 = n2.doubleValue();
  }
}

Поднял отредактированное решение из этого вопроса

На самом деле это работает в моем случае. У меня только один разделитель.

Borislav Stefanov 09.05.2019 13:38

@SirFartALot, какое двойное значение вы ожидаете от 1.234.567,89?

AK47 09.05.2019 13:42

dblStr = "1.234.567,89"; DecimalFormat.getInstance(Язык.НЕМЕЦКИЙ).parse(dblStr) --> 1234567.89d DecimalFormat.getInstance(Язык.США).parse(dblStr) --> 1.234d

SirFartALot 09.05.2019 13:49

Другие вопросы по теме