impala中的bug,float和double的比较
程序员文章站
2022-07-11 08:25:37
...
impala版本是1.2.4. 目前版本是1.3.1 改bug还是未修复状态。
测试sql:
create table t1(age float);
insert into t1 value(3.3);
3.3被词法解析为FloatLiteral。 我们希望这个是float,但是却提示为double,无法匹配。出现问题代码如下:
private void init(Double value) {
this.value_ = value.doubleValue();
// Figure out if this will fit in a FLOAT without loosing precision.
float fvalue;
fvalue = value.floatValue();
if (fvalue == value.doubleValue()) {
type_ = ColumnType.FLOAT;
} else {
type_ = ColumnType.DOUBLE;
}
}
fvalue=value.doubleValue()这个语句是有问题的。
float f=3.3 double d=3.3 但是f==d是false. float和double不能直接比较。
解决方法:
1: Float a=new Float(f) ; Float b=new Float(value.doubleValue()) a.equal(b);
2: Math.abs(f-d)<0.0000001;
看完了帮点个赞吧,谢谢
转载于:https://my.oschina.net/1987times/blog/261211
上一篇: 六七, Hive 数据查询实操, 以及Hive的分区和分桶
下一篇: 用队列实现栈
推荐阅读
-
Linux中curl命令和wget命令的使用介绍与比较
-
MySQL中Decimal类型和Float Double的区别(详解)
-
JS中对日期进行增加以及比较两个日期的Android和iOS都兼容(代码实例)
-
以php中的比较运算符操作整型,浮点型,字符串型,布尔型和空类型
-
float和double的区别
-
Vue.js中extend选项和delimiters选项的比较
-
【转载】C#中ArrayList集合类和List集合类的比较
-
Java中 equals 和 == 的比较
-
Java日期时间API系列30-----Jdk8中java.time包中的新的日期时间API类,减少时间精度方法性能比较和使用。
-
Java中stream处理中map与flatMap的比较和使用案例