用精确的oracle划分和插入
divide and insert with precision oracle
我需要在 table 中精确插入一条记录。例如:
insert into spend_amount (record_no,purchase_amount)
values ('1',(to_number(100.99/2)));
我有一个 purchase_amount 列作为 VARCHAR2。因此,在执行此查询时,它会插入为 50.495
。但我只需要插入两个精度位置。预期结果应为 50.49
或四舍五入为 50.50
。如何实现?
Oracle SQL 包含一个 round()
函数。第一个参数是值,第二个参数控制舍入的程度。所以四舍五入到小数点后两位:round((100.99/2),2)
。 Find out more.
不确定为什么在您的示例代码中有一个 to_number()
调用,因为您已经 是 一个数字。此外,将数值存储为字符串是一个非常糟糕的主意:这是一生不必要的痛苦。
首先,将 purchase_amount
这样的数值存储为 varchar2
是没有意义的。它真的,真的,真的应该存储为一个数字,在这种情况下,它实际上将具有您自动指定的任何精度。
其次,对数值调用to_number
没有意义。 to_number
只接受一个字符串。因此,如果您传入一个数值,Oracle 必须将该数字隐式转换为一个字符串,然后 to_number
将该字符串显式转换回一个数字,以便让您回到开始的位置。
如果要将值四舍五入为 50.5,请使用 round
。如果要将值截断为 50.49,请使用 trunc
.
insert into spend_amount( record_no, purchase_amount )
values( 1, round( 100.99/2, 2 ));
或
insert into spend_amount( record_no, purchase_amount )
values( 1, trunc( 100.99/2, 2 ));
我需要在 table 中精确插入一条记录。例如:
insert into spend_amount (record_no,purchase_amount)
values ('1',(to_number(100.99/2)));
我有一个 purchase_amount 列作为 VARCHAR2。因此,在执行此查询时,它会插入为 50.495
。但我只需要插入两个精度位置。预期结果应为 50.49
或四舍五入为 50.50
。如何实现?
Oracle SQL 包含一个 round()
函数。第一个参数是值,第二个参数控制舍入的程度。所以四舍五入到小数点后两位:round((100.99/2),2)
。 Find out more.
不确定为什么在您的示例代码中有一个 to_number()
调用,因为您已经 是 一个数字。此外,将数值存储为字符串是一个非常糟糕的主意:这是一生不必要的痛苦。
首先,将 purchase_amount
这样的数值存储为 varchar2
是没有意义的。它真的,真的,真的应该存储为一个数字,在这种情况下,它实际上将具有您自动指定的任何精度。
其次,对数值调用to_number
没有意义。 to_number
只接受一个字符串。因此,如果您传入一个数值,Oracle 必须将该数字隐式转换为一个字符串,然后 to_number
将该字符串显式转换回一个数字,以便让您回到开始的位置。
如果要将值四舍五入为 50.5,请使用 round
。如果要将值截断为 50.49,请使用 trunc
.
insert into spend_amount( record_no, purchase_amount )
values( 1, round( 100.99/2, 2 ));
或
insert into spend_amount( record_no, purchase_amount )
values( 1, trunc( 100.99/2, 2 ));