2017-08-24 48 views

回答

1

双方正在转换为加倍

hive> select '6455983054544699410' = 6455983054544699395; 
WARNING: Comparing a bigint and a string may result in a loss of precision. 
OK 
_c0 
true 

hive> select cast('6455983054544699410' as double) , cast (6455983054544699395 as double); 
OK 
_c0 _c1 
6.4559830545446994E18 6.4559830545446994E18 

https://github.com/apache/hive/blob/master/ql/src/java/org/apache/hadoop/hive/ql/plan/ExprNodeGenericFuncDesc.java

// For now, if a bigint is going to be cast to a double throw an error or warning 
     if ((oiTypeInfo0.equals(TypeInfoFactory.stringTypeInfo) && oiTypeInfo1.equals(TypeInfoFactory.longTypeInfo)) || 
      (oiTypeInfo0.equals(TypeInfoFactory.longTypeInfo) && oiTypeInfo1.equals(TypeInfoFactory.stringTypeInfo))) { 
     String error = StrictChecks.checkTypeSafety(conf); 
     if (error != null) throw new UDFArgumentException(error); 
     console.printError("WARNING: Comparing a bigint and a string may result in a loss of precision."); 
     } else if ((oiTypeInfo0.equals(TypeInfoFactory.doubleTypeInfo) && oiTypeInfo1.equals(TypeInfoFactory.longTypeInfo)) || 
      (oiTypeInfo0.equals(TypeInfoFactory.longTypeInfo) && oiTypeInfo1.equals(TypeInfoFactory.doubleTypeInfo))) { 
     String error = StrictChecks.checkTypeSafety(conf); 
     if (error != null) throw new UDFArgumentException(error); 
     console.printError("WARNING: Comparing a bigint and a double may result in a loss of precision."); 
     } 
+0

太谢谢你了!现在我明白了! – nofucksay

相关问题