Java RESTWeb服务返回双精度

Java RESTWeb服务返回双精度,java,rest,precision,double-precision,Java,Rest,Precision,Double Precision,我有下面的代码,以获得双精度和5位小数,但没有得到 @RequestMapping(value = "/double1/{double}", method = RequestMethod.GET) @ResponseBody public double getDouble1(@PathVariable("double")double dou){ System.out.println(dou); return dou; } 以下是输入输出

我有下面的代码,以获得双精度和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 

Michael Laffargue的链接问题()给出了答案-double中的“
”被自动解析为文件扩展名(然后被Spring MVC解释为接受头)。您可以在XML Spring配置中禁用此后缀模式匹配:

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

我还建议使用
BigDecimal
而不是Jon Skeet和Michael建议的
double
,因为精度损失。

哪个API?Jersey?小数点前有16位-我怀疑您对双精度的期望太高了。您是否尝试过使用
BigDecimal
来代替它?如果您使用的是Spring MVC,请看这里的第二个答案:可能是由于double后自动删除造成的。请注意double并不精确-->
double a=0.3-0.1
给出
0.19999999999998
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
    configurer.setUseSuffixPatternMatch(false);
}