Я не могу правильно обработать инициализацию BigDecimal, у меня есть объект, у которого есть поле BigDecimal, например:
@Entity
public class Menu{
...
@Digits(integer=6, fraction=2)
private BigDecimal price;
...
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
...
other generated getters and setters toString etc.
...
}
И во внешнем интерфейсе я использую тимелеф в форме html (которая добавляет и обновляет новый пункт меню) у меня есть этот вход для значения большого десятичного числа:
<div class="form-group">
<label for="price">Enter Price</label>
<input type="number" class="form-control" step="0.01" id="price" name="price" th:field="*{price}" placeholder="enter Price" value=" ">
</div>
И для ограничения пользователя, чтобы ввести более 2 di git точность значения цены, у меня есть код js как это:
$('#price').keypress(function (e) {
var character = String.fromCharCode(e.keyCode)
var newValue = this.value + character;
if (isNaN(newValue) || parseFloat(newValue) * 100 % 1 > 0) {
e.preventDefault();
return false;
}
});
Вопрос : когда пользователь вводит значение 10,25 в форме, тимелист отображает его как 10,2499998 ... Даже другие конечные точки остальных возвращают эту сущность со значением в json, например, 10.249999. Но когда я посмотрел на свою базу данных (postgresql и, конечно, я использую jpa), это значение кажется вполне подходящим - 10,25. Поэтому я знаю, что при инициализации нового значения BigDecimal конструктор должен быть похож на новый BigDecimal ("10.25") со строкой в параметре. Но все, что у меня есть, - это методы получения и установки по умолчанию, а мой контроллер - простой постконтроллер для сохранения сущностей, например:
@PostMapping("/additem")
public String addItemPost(@ModelAttribute(value="menu") @Valid Menu menu,Model model,BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "addmenuitem";
}
this.menuService.saveMenuItem(menu);
return "redirect:/restaurant/menu";
}
Проблема 2: Я попытался изменить BigDecimal со значением Double, и после этого форма ввода принимает значение, как мы предлагаем, и я вижу это значение везде правильно. Но если я пишу больше di git после запятой, функция js блокирует мне запись более 2 di git, но реальное значение снова становится 10.2499999 ...
Должно быть, это что-то в стратегии Spring, заключающейся в том, чтобы брать значения из формы тимелина, а затем инициализировать эти значения в сущности, но я никогда не делаю этого вручную, так как сосед не может их отладить.
Так что я не знаю, проблема в том, что моя javascript функция или моя форма ввода или тип переменной. Пожалуйста, помогите. Любая помощь будет оценена.