执行sql,在oracle中不会有问题,但是放在.NET里执行sql就会报错:溢出
原因:
Oracle 数值数据类型最多可存储 38 个字节的精度。当将 Oracle 数值转换为公共语言运行库数据类型时,
Oracle 值可能会变得过大。这会导致 Oracle OCI-22053 溢出错误。
解决办法:
1.使用Round函数:SELECT ROUND(1/3,2) FROM DUAL
2.使用TO_CHAR:SELECT TO_CHAR(1/3) FROM DUAL
3.使用ceil 取整
第一种会减小精度,但数据类型不变,第二种则不会改变精度,但数据类型改变。
用oracle sql对数字进行操作: 取上取整、向下取整、保留N位小数、四舍五入、数字格式化
取整(向下取整):
select floor(5.534) from dual;
select trunc(5.534) from dual;
上面两种用法都可以对数字5.534向下取整,结果为5.
如果要向上取整 ,得到结果为6,则应该用ceil
select ceil(5.534) from dual;
四舍五入:
SELECT round(5.534) FROM dual;
SELECT round(5.534,0) FROM dual;
SELECT round(5.534,1) FROM dual;
SELECT round(5.534,2) FROM dual;
结果分别为 6, 6, 5.5, 5.53
保留N位小数(不四舍五入):
select trunc(5.534,0) from dual;
select trunc(5.534,1) from dual;
select trunc(5.534,2) from dual;
结果分别是 5,5.5,5.53,其中保留0位小数就相当于直接取整了。
数字格式化:
select to_char(12345.123,'99999999.9999') from dual;
结果为12345.123
select to_char(12345.123,'99999999.9900') from dual;
小数后第三第四为不足补0,结果为12345.1230
select to_char(0.123,'99999999.9900') from dual;
select to_char(0.123,'99999990.9900') from dual;
结果分别为 .123, 0.123