Как перенести число с плавающей точкой из-за запроса HTTP GET? - PullRequest
0 голосов
/ 17 мая 2018

Не могли бы вы помочь мне с моей проблемой?У меня есть серверная часть на Java Spring Boot, и мне нужно использовать GET запрос для передачи, например, «2300,55».Как я понимаю, GET может передавать только строки и с длинными номерами, где проблем не было, но мне нужно передавать число с запятой или с точкой.Как это сделать?

Я попытался разобрать его, получил String и разобрать в блоке try / catch:

...
    @PathVariable("weight") String weight
    try {
        float parsedWeight = Float.parseFloat(weight);
    } catch (NumberFormatException e) {
...

И перехватил

java.lang.NumberFormatException: Для входной строки: "2300,55"

Но если я попытаюсь сделать это с точкой вместо запятой "2300.55", она сохранится в базе данных, но станет просто "2300".База данных PostgreSQL и тип столбца REAL ->, то есть float4 (число с плавающей запятой одинарной точности (4 байта))

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

(у меня недостаточно репутации, чтобы комментировать) Вы можете просто заменить "," на "." в строке до разбора. Для вас второй вопрос реальный достаточно большой, чтобы держать java float, так что, возможно, проблема где-то в постоянном

0 голосов
/ 17 мая 2018

И пойманный java.lang.NumberFormatException: Для входной строки: "2300,55"

Проблемы, связанные с использованием десятичной запятой вместо точки, относятся к локализации .Если удаленный отправляет номера, такие как 2300,55, это означает, что он отправляет номера в локализованной форме.Как правило, это рассматривается как Чрезвычайно Плохо при сетевом взаимодействии: все данные должны передаваться между программами в нейтральной для региона форме.Локализованные формы должны использоваться только во взаимодействии с людьми.Итак, предложенный способ - исправить удаленную сторону, чтобы она отправляла только нейтральные представления.

Но, если вы не имеете никакого влияния на удаленную сторону и вам приходится иметь дело с поврежденными формами, попробуйте Java Scanner методы класса с установкой ожидаемой локали или LocalDecimalSeparator отдельно.Для десятичной запятой это, вероятно, какая-то европейская локаль.

(я не могу ответить за проблему с БД.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...