在做sql任务时,为什么出来的数字有哪多么小数,实际加工计算为45.90.

实际产品单价为3.6,数量为15,折扣为0.15

我想知道的是为什么有这种错误,我直接乘0.85,数据没错,如果用数据库数据就有问题。为什么这样

image.png

zzjjss 发布于 2019-7-25 15:55 (编辑于 2019-7-25 16:18)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
ayuyczLv2见习互助
发布于2019-7-25 16:25

因为在计算机的底层是二进制

我们平时在电脑里做的十进制是先转换成为对应的二进制放在内存里再根据编码规则和算法规则进行计算的

但是电脑在处理数据时的内存是有限长度的,比如我们常说的CPU32位或64位即CPU一次能处理的字长长度,或者我们在数据库建表时设置的float数据类型设置他为N位长度

在运算的某些地方如果超出了计算机的内存长度(即常说的溢出),计算就会截断最右保留最左位数的值。

这样计算结果就会出现误差。

遇到这种情况,一般设定字符或单元格的精度类型就可以了。

  • zzjjss zzjjss(提问者) 确实是float数据类型默认小数位位是N位的问 题,改了数据类型后计算正确
    2019-07-25 16:44 
最佳回答
0
凌建Lv7高级互助
发布于2019-7-25 16:05

外面包一层  cast(数量*XX as int) 

  • zzjjss zzjjss(提问者) 我想知道的是为什么有这种错误,我直接乘0.85,数据没错,如果用数据库数据就有问题。为什么这样
    2019-07-25 16:22 
最佳回答
0
吴浩Lv6中级互助
发布于2019-7-25 16:08

round(订单明细.单价*订单明细.数量*(1-订单明细.折扣),2) as 销售金额,这样就保留两位小数了


  • zzjjss zzjjss(提问者) 我想知道的是为什么有这种错误,我直接乘0.85,数据没错,如果用数据库数据就有问题。为什么这样
    2019-07-25 16:22 
最佳回答
0
axingLv6专家互助
发布于2019-7-25 16:26

你查一下这些字段的数据类型,应该是浮点型float、double,这些数据类型在计算的时候都会有精度误差,

如果想要准确的小数计算,建议定义成decimal类型

  • 5关注人数
  • 526浏览人数
  • 最后回答于:2019-7-25 16:26
    请选择关闭问题的原因
    确定 取消
    返回顶部