所以我有一个表达: [8.42431001E10].contains(getSomeValue('000000084243100100'))
getsomevalue(字符串值)将字符串转换为双精度。
public Object getSomeValue(String value) {
if (NumberUtils.isNumber(value)) {
try {
result = NumberUtils.createDouble(value);
} catch (Exception e) {
result = value;
}
} else {
result = value;
}
return result;
}
也就是说 getSomeValue('000000084243100100')
返回8.42431001e10
然而,上面的表达 [8.42431001E10].contains(getSomeValue('000000084243100100'))
返回false,即使我希望它为true。
将所有内容转换为字符串(如此字符串)时: ["8.42431001E10"].contains(getSomeValue('000000084243100100').toString())
返回true。
我想了解如何使其作为双精度值而不是字符串返回true。
我也尝试过这样做:
[8.42431001E10].contains(Double.valueOf(getSomeValue('000000084243100100')))
但仍然是错误的。
请帮忙。非常感谢。
1条答案
按热度按时间kiayqfof1#
groovy中的“数字文字”为您提供了
BigDecimal
(而不是像许多其他(jvm-)语言中的float/double)。及BigDecimal
是精确的,而双精度/浮点值不是(这是速度大于精度的近似值)。因此,您必须将一侧投影到同一类型,以使它们具有可比性。
既然两个数字实际上都没有分数,这就引出了一个问题,为什么不使用呢
BigInteger
不管怎样,首先对双方都是如此。