sum函数对Double类型求有精度损失问题?

Nebula:

  • nebula 版本:2.6.0
  • 部署方式:分布式
  • 安装方式:Docker
  • 是否为线上版本:N

问题的具体描述:
测试发现sum对Double类型求和有精度损失,这是我的设置有问题?还是当前版本存在此问题?

相关测试截图:
字段类型:

单条查询:

求和:

1 个赞

发一下文本,不要截图

单条:

amount                 busd
335130.359239    335230.9285085
330700.45991     331031.49107037

求和:

amount                busd
665830.819149   666262.4195788701

这个结果有啥问题么

结果应该是:
666262.41957887

sum求和是:
666262.4195788701

这里最后多了01。
我测试过程中也有0.33334 求和结果为0.3333399 这种类似的情况。

浮点数是有精度损失的

这个问题有解决办法吗?

现在只有toFloat(),没有支持toDouble()是什么原因呢?

toFloat就是toDouble,计算层没有float类型

理解了。

下面的测试,得到的结论就是sum求和对浮点有精度损失。
要不损失精度,目前可以做到吗?

DROP TAG INDEX IF EXISTS test_index_amount;
DROP TAG IF EXISTS test;

CREATE TAG IF NOT EXISTS test (
  `amount`  DOUBLE  COMMENT "amount"
);

CREATE TAG INDEX test_index_amount ON test(amount);

INSERT VERTEX test(amount)
VALUES "vid01" : (335230.9285085);
INSERT VERTEX test(amount)
VALUES "vid02" : (331031.49107037);

MATCH (v: test)
RETURN
		sum(properties(v).amount) AS amountSum

做不了的,double的表示方法就是有精度损失的

了解了,谢谢。

数据库中有一种高精度decimal类型,专门来处理你这类问题的。

您是指nebula吗?但nebula现在没有decimal

传统的经典的数据都有这种类型。nebula目前没有。

所以,现在nebula就是不能解决我这个问题是吗? :joy:

是的,你可以去给我们提供issue

了解了,谢谢。

Kyle 方便的话,可以给我们提一个 feature issue 哈:https://github.com/vesoft-inc/nebula/issues/new/choose 方便我们做下一次的版本功能规划~ 谢谢啦

已创建issue,https://github.com/vesoft-inc/nebula/issues/3902

1 个赞

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。