Why do bean validation Min/Max constraints not support the double type?(为什么Bean验证最小/最大约束不支持Double类型?)
本文介绍了为什么Bean验证最小/最大约束不支持Double类型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
请解释一下,为什么JPA支持double
类型作为字段类型,而javax.validation.constraints
中的Bean验证约束(即@Min/@Max)不支持?
我知道文档说这是由于舍入误差,但如果我选择字段类型为double
,我已经承认我不太关心显式精度。
我遇到这种两难境地的场景如下:我有一个实体表示地球表面上的一个点。如果精度在几厘米以内就可以了。它看起来像这样:
@Entity
public class Point {
/**
* The longitude in radians.
*/
@Min(-Math.Pi)
@Max(Math.Pi)
double longitude;
/**
* The latitude in radians.
*/
@Min(-Math.Pi / 2)
@Max(Math.Pi / 2)
double latitude;
}
不幸的是,这不起作用,因为注释不支持Double类型。但是使用BigDecimal
并不是一种真正的选择,因为我有一些大量的计算,需要进行多个点,这仍然需要相当快。我通过定义适用于double
的自定义约束检查解决了这个问题,但不知何故,我认为在整个故事中我遗漏了一些东西。那么,我错过了什么?
推荐答案
因为四舍五入。但这并不是因为双精度数可能不足以表示您想要的数字的问题。更重要的是,Min
和Max
的注释值是Long类型的,所以它不能表示任何带小数位的数字。另一方面,您不能使用双精度型来精确地表示长整型可以表示的所有数字。
所以API设计人员必须在两种方式中选择一种(长的或双倍的)
这篇关于为什么Bean验证最小/最大约束不支持Double类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:为什么Bean验证最小/最大约束不支持Double类型?
基础教程推荐
猜你喜欢
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01