请问403.375保留两位小数为什么是403.37?

select id,-(col2*(-1)+2)+(col4+4)(col1+col35),(5+col2)col33 from exp_table where -(col2*(-2)+8)+(col4+6)(col1+col39) > (5+col2)col39;
2 | 85.63 | 47.16
3 | 99.78 | 24.48
7 | 326.92 | 167.58

  • 7 | 403.37 | 181.02
  • 7 | 403.38 | 181.02
    8 | 256.27 | 132
    – below are some requests executed before(partial) –
    – init data
    create table exp_table(id int, col1 int, col2 int, col3 float, col4 float);
    create table exp_table2(id int, col1 int);
    insert into exp_table VALUES (8, 9, 5, 4.4, 4.17);
    insert into exp_table VALUES (7, 3, 9, 3.99, 9.94);
    insert into exp_table VALUES (7, 3, 2, 8.62, 4.75);

    -(col2*(-1)+2)+(col4+4)(col1+col35)算出来是等于403.375:
    -(2*(-1)+2)+(4.75+4)(3+8.625)=0+8.75*46.1=403.375
    我的输出是403.38,答案显示是403.37.
1 个赞

答案是跟mysql的结果进行对比的,mysql会有浮点的精度误差,这个题目有时候确实会因为这样过不去

那是不是要对这种情况做特殊处理,还是你们的数据每次都是随机数据,下次提交就不一定会出这个问题了?

而且mysql四舍五入算法跟常规的四舍五入不一样,是采用的银行家舍入法

对,数据是随机的

如果是银行家舍入,那么应该也是403.38呀,这么会是403.37呢?

只是列举有可能的情况,那这个就应该还是精度的问题:thinking: