我在更新查询时遇到问题。我正在将balance1字段更新为6442450941.026600。
update account_subscriber set total_balance1=6442450941.026600
where SUB_ID='xyz'
但结果如下(在我们得到的选择stmt之后)
TOTAL_BALANCE1 6442450941.02659988
第二种情况: 让我们使用以下值进行更新
update account_subscriber set total_balance1=6442450941.4567
where SUB_ID='xyz'
结果是6442450941.45670032。
能帮助我理解为什么精度会发生变化。
Sql * plus版本的版本是10.2.0.3.0
谢谢和问候, Chandra Bhushan Bakshi
答案 0 :(得分:3)
我能想到的唯一解释是,在数据库和显示它的位置之间的某个路径中,它被转换为浮点值。我将PL / SQL Developer用于我的Oracle开发工具并认为它非常可靠。因此,当我运行以下内容时,想象一下我的意外:
create TABLE rpj_test (val number(22, 8));
INSERT INTO rpj_test(val) VALUES (6442450941.026600);
SELECT * FROM rpj_test;
我得到了您报告的确切结果(6442450941.02659968)。 WTF?!?!?
但后来我问自己一个重要的问题 - 如何测试这个以确保自己确实数据实际上在数据库中?所以我运行了以下查询:
SELECT val * 10000 FROM rpj_test;
得到了我预期的答案(64424509410266)。
所以看来数据库中的数据是正确的。毫不奇怪 - 我认为Oracle的NUMBER类型是该产品中最好的未被注意的功能之一,它已经永远存在,并且它是坚如磐石的(如果我们希望我们的系统有机会正常工作,那就更好了: - )。好的,所以在我看来这看起来像是一个浮点转换错误 - 我该怎么办呢?所以关闭我在PL / SQL Developer的首选项配置对话框中,我在SQL窗口选项卡上找到了一个标题为“Number fields to_char”的简洁设置,但没有检查。我检查了这个,重新运行了第一个SELECT查询,然后看到数据按预期显示。
故事的道德:
分享并享受。
答案 1 :(得分:0)
您提供的值无法通过接收列的数据类型解析到所需的精度。如果您需要精确到百万分之,如问题所示,您应该检查表字段的数据类型的精度并相应地进行调整。
答案 2 :(得分:0)
这是因为您使用的是不精确的数据类型。
答案 3 :(得分:0)
这只是一个pl / sql开发人员显示问题。 在PL / SQL开发人员中,选择“工具”菜单和“首选项”选项,然后在“SQL”窗口中键入“数字”布局,取消选中格式化选项并选择任何其他选项并查看正确的结果。 :)