java - Rest Web 服务精确返回 double

标签 java rest precision double-precision

我有以下代码来获取带有 5 位小数的 double 值,但没有得到

@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 的链接问题 ( Spring MVC @PathVariable getting truncated ) 给出了答案 - double 中的 '.' 被自动解析为文件扩展名(然后被 Spring MVC 解释为 Accept header )。您可以在 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 而不是 Jon Skeet 和 Michael 建议的 double

关于java - Rest Web 服务精确返回 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25725126/

相关文章:

java - Android:以编程方式备份​​消息和文件

Java 双加四舍五入

numpy - 在 python 中模拟固定精度

java - Spring REST获取多个映射端点的url路径

web-services - REST API 404 : Bad URI, 或缺少资源?

go - 是否有任何标准库可以将 float64 转换为具有固定宽度和最大有效位数的字符串?

java - JSF Converter oneSelectMenu 空指针异常

java - Java 中可用的协程库

java - 重新启动 while 循环

ruby - Office 365 API 在/me/calendars 端点上抛出 500