Остальной веб-сервис вернет двойной с точностью

1

У меня есть следующий код, чтобы получить double с 5-значным десятичным, но не получающим

@RequestMapping(value = "/double1/{double}", method = RequestMethod.GET)
    @ResponseBody
    public double getDouble1(@PathVariable("double")double dou){
        System.out.println(dou);
        return dou;
    }

Ниже приведен входной выход

http://localhost:8080/svc/double1/4569999999999991.922222222333 ==> 4569999999999991
http://localhost:8080/svc/double1/4569999999999991.1234567 ==> 4569999999999991 
  • 0
    Какой API? Джерси?
  • 4
    У вас есть 16 цифр перед десятичной точкой - я подозреваю, что вы ожидаете слишком много от double . Вы пробовали использовать BigDecimal вместо этого?
Показать ещё 2 комментария
Теги:
rest
precision
double-precision

1 ответ

1

Связанный с Майклом Лаффаргом вопрос (Spring MVC @PathVariable, усеченный) имеет ответ - . 'в double автоматически анализируется как расширение файла (а затем интерпретируется Spring MVC как заголовком Accept). Вы можете отключить это сопоставление шаблонов суффикса в любой конфигурации XML Spring:

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="useDefaultSuffixPattern" value="false" />
</bean>

или с помощью JavaConfig в вашем WebMvcConfigurerAdapter:

@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
    configurer.setUseSuffixPatternMatch(false);
}

Я бы также рекомендовал использовать BigDecimal вместо double как предложил Джон Скит и Майкл, из-за потери точности.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню