我有以下代码获得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 :(得分:1)
Michael Laffargue的链接问题(Spring MVC @PathVariable getting truncated)有答案 - double中的'.
'被自动解析为文件扩展名(然后由Spring MVC解释为Accept标头) 。您可以在XML Spring配置中禁用此后缀模式匹配:
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="useDefaultSuffixPattern" value="false" />
</bean>
或在WebMvcConfigurerAdapter
中使用JavaConfig:
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUseSuffixPatternMatch(false);
}
我还建议使用BigDecimal
代替double
,如Jon Skeet和Michael建议的那样,由于精确度损失。