两个负数相乘是正数吗
来说确实愧疚,用spark解决hive表格中的数据信息时,出現了2个正数乘积最终数据显示为负数后我的第一反应居然有点儿懵圈,充分证明了自身在应用数据信息时,对Hive表格中的字段种类沒有开展充足的掌握,那时候,第二反映才想到是基本数据类型造成的数据信息超出了,这一还得归结为在那时候建立Hive表的情况下,沒有充足对表中每一个字段要储存的基本数据类型开展充足调研
归类基本数据类型字节数取值范围初始值布尔运算boolean1false,truefalse整数金额字节数型byte1-128~127,即-2^7 ~ -2^7-10整数金额短整形short2-32768~32767,即-2^15 ~ -2^15-10整数金额整形int4-2147483648~2147483647,即-2^31 ~ -2^31-10整数金额长整型long8-9 223 372 036 854 775 808~9 223 372 036 854 775 807,即-2^63 ~ -2^63-10标识符char20~65535,\\u0000 ~ ?\\u0000浮点数单精度浮点数float4负数范畴:-3.4028234663852886 × 10^38 ~ -1.40129846432481707 × 10^-45,正数范畴:1.40129846432481707 × 10^-45~3.4028234663852886 × 10^380.0f浮点数双精度浮点数float8负数范畴:-1.7976931348623157 × 10^308 ~ -4.94065645841246544 × 10^-324,正数范畴:4.94065645841246544 × 10^1.7976931348623157 × 10^3080.0
Hive表一个字段的种类

文章插图
我的实际操作
出現的难题
根据抽样检查total_flow = 113716790,乘于25后为3411503700,avg_tf = 2个负数乘积是正数吗322183360,一切正常結果约为38,可实际結果约为-1.75…
根本原因
int较大 赋值为2147438647,而如今早已做到3411503700,显而易见远远地超出了int的取值范围,因而出現那样的缘故
解决方法
(1)改动字段的种类为Double
(2)在预估的情况下,将字段的计算成数量级小一下的,避免 超出,例如我这里给分子分母另外除于1000,或是先除后乘
这儿做一个简单检测:int最高值 1的結果?
結果:
为何超出int较大 范畴結果变成负数?
【两个负数相乘是正数吗】这一和电子计算机怎样储存二进制相关,在电脑上里是以补码出現的 。第一位是标记位 。0为正,1为负,当正的除开标记位全为1时候,如果再加一就进位了,造成标记位为1,别的为0,再换为102个负数乘积是正数吗 进制便是你这一数了
- 睫毛|新生宝宝若有5个症状中的两个,未来颜值会很高,宝妈偷着乐吧
- 幸福需要两个人的经营(幸福是啥)
- 男人同时欺骗两个女人的感情(同时爱上两个女人怎么办)
- 孕妇|孕期可以适当洗澡,但孕妇这两个部位,再脏也别使劲洗,会伤胎
- 两个互不喜欢的人在一起(如果两个人互相喜欢怎么办)
- 父母|父母注意,孩子的两个行为,是不孝顺的“信号”,别忽视了
- 智商|孕妈赶上这两个月怀孕,就偷着笑吧,胎儿智商会更高
- 恋爱腻了怎么处理(谈恋爱两个月就平淡了)
- 毛医生|术后1年又复发!这两个诱因很多家长忽视了
- 女人太懒离婚(两个懒惰的人能结婚吗)
