暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

对 double 数值进行 round 取舍结果不是四舍五入问题现象

路易十四猪 2022-06-30
421

对 double 类型数值进行 round 取舍,结果不是四舍五入。
gbase> create table t(c1 double);
Query OK, 0 rows affected (Elapsed: 00:00:00.55) GBase 8a MPP Cluster FAQ FAQ
文档版本(2021-04-02) 南大通用数据技术股份有限公司
69
gbase> insert into t values(41.325);
Query OK, 1 row affected (Elapsed: 00:00:00.03)
gbase> select c1,round(c1,2) from t;
+--------+-------------+
| c1 | round(c1,2) |
+--------+-------------+
| 41.325 | 41.32 |
+--------+-------------+
1 row in set (Elapsed: 00:00:00.00)
解决方法
 DOUBLE 代表一个浮点型数值,它所存储的数值不是一个准确值。所以造成
了结果的差别。
 对 double 类型作 round ,采取了“四舍六入五凑偶”的规则。
说明
 “四舍”是指≤ 4 时舍去;
 " 六入 " 是指≥ 6 时进上;
 " 五凑偶 " 指的是根据 5 后面的数字来定,当 5 后有数时,舍 5 入 1 ;
 当 5 后无数或为 0 时,分两种情况:
1. 5 前为奇数,舍 5 入 1 ;
2. 5 前为偶数,舍 5 不进。 GBase 8a MPP Cluster FAQ FAQ
文档版本(2021-04-02) 南大通用数据技术股份有限公司
70
gbase>select count(*) from lineorder;
ERROR 1708 (HY000): [192.168.105.211:5050](GBA-02AD-0005)Failed to
query in gnode:
DETAIL: (GBA-01EX-0006) Express out of resources error:Too many
tuples.
gbase> show variables like '%_gbase_result_threshold%';
+-------------------------+--------------+
| Variable_name | Value |
+-------------------------+--------------+
| _gbase_result_threshold | 137438953472 |
+-------------------------+--------------+
1 row in set (Elapsed: 00:00:00.00)
限制物化结果(中间结果和最终结果)记录数的参数 _gbase_result_threshold 总结
如下:
 参数值为 0 时,对物化结果集不做限制。
 参数值不为 0 时,取值范围为 [1 , _gbase_result_threshold] 。
 _gbase_result_threshold 的最小值为 0 (为 0 时对物化结果集不做限制),最大
值为 140737488355325 ( 2^47-3 , GBase 8a Express 引擎以前支持的物化结果
的最大记录数),默认值为 137438953472 (
2 的 37 次方)。
————————————————
版权声明:本文为CSDN博主「m0_49291452」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_49291452/article/details/125540402

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论