oracle 保留小数位

方法一:使用to_char的fm格式 
to_char(round(data.amount,2),‘FM9999999999999999.00‘) as amount 
不足之处是,如果数值是0的话,会显示为.00而不是0.00。 
另一需要注意的是,格式中小数点左边9的个数要够多,否则查询的数字会显示为n个符号“#”。 
解决方式如下: 
select decode(salary,0,‘0.00‘,(to_char(round(salary,2),‘fm99999999999999.00‘))) from can_do;

方法二:使用case when then else end进行各种情况的判断处理 
case 
when instr(to_char(data.amount), ‘.‘) < 1 then 
data.amount || ‘.00‘ 
when instr(to_char(data.amount), ‘.‘) + 1 = length(data.amount) then 
data.amount || ‘0‘ 
else 
to_char(round(data.amount, 2)) 
end as amount_format

方法三:可以使用Oracle自带的参数设置 
column amount format l9999999999.99 
此方法的不足是,format中的小数点左面的9的个数要已知,否则会出现超过的数字显示为########的情况。 
另外一个问题是,使用column时,设置生效是session级还是system级,需要注意。 
也许某张表的数值列不总是要求所有的地方显示时,都是小数点后两位的格式,此时只能使用session级,但是有个数据库连接会话超时的问题,如果不是使用到system级,不建议使用该方法。

方法四:使用to_char+trim的方式 
select trim(to_char(1234,‘99999999999999.99‘)) from dual; 
或者 
select ltrim(trim(to_char(1234.525,‘00000000000000.00‘)),‘0‘) from dual; 
此处使用了14个9或者14个0的格式,建议使用14个9的方式,方便些。方法四的不足之处是: 
如果数值是0的话,转化之后为.00而不是0.00,补救措施是,decode一下。 
另一需要注意的是,格式中小数点左边9或者0的个数要够多,负责查询的数字会显示为n个符号“#”。 
如下: 
select decode(salary,0,‘0.00‘,trim(to_char(salary,‘99999999999999.99‘))) from can_do; 
或者 
select decode(salary,0,‘0.00‘,ltrim(trim(to_char(salary,‘00000000000000.00‘)),‘0‘)) from can_do; 
结论:建议使用方法四中的trim+to_char的方式或者方法一的补救之后的方式,而且最好使用小数点左边n个9的方式,不要使用0的方式,否则,要多一步trim处理。 
即:select decode(salary,0,‘0.00‘,trim(to_char(salary,‘99999999999999.99‘))) from can_do; 
或者 
select decode(salary,0,‘0.00‘,(to_char(round(salary,2),‘fm99999999999999.00‘))) from can_do;

时间: 2024-10-17 22:13:12

oracle 保留小数位的相关文章

sprintf() 处理 float类型的数字,保留小数位等。

关于 sprintf()的百科地址: http://baike.baidu.com/view/1295144.htm sprintf(szText, "%[填空字元][宽度][.精度]f", v); 填空字元: 0 的话表示空格填 0:空格是内定值,表示空格就放着. 1. 设置保留小数位长度, 注意: 会四舍五入 2. 设置输出宽度,不够部分用空格填充 3. 设置输出宽度和[填充字符],不够部分,用[填充字符:0]来填充  2014-08-04

C# 当double数值较大且小数位过多时转化成字符串并保留小数位

今天在C#中碰到了一个问题,需要将double转换成字符串显示,要求保留小数位. 在网上查询了一下相关的文章 具体如下: double temp=3.1415926; (F)Fixed point:string str1=temp.toString("f1");//保留一位小数 四舍五入 结果:3.1 (F)Fixed point:string str2=temp.toString("f2");//保留两位小数,四舍五入 下面一次类推 结果:3.14 (N)Numb

解决使用DbContext保存Decimal数据时总是保留小数位2位问题

通过System.Data.Entity.DbContext保留Decimal类型数据时,默认只保留小数位2位.要解决该问题,可以通过在OnModelCreating事件中添加相应代码即可,具体参考如下代码中将shop.Longitude设置为小数位20位: public class UserDbContext : System.Data.Entity.DbContext { public UserDbContext() : base("MyContext") { this.Confi

python保留小数位

前言 保留小数位是我们经常会碰到的问题,尤其是刷题过程中.那么在python中保留小数位的方法也非常多,但是笔者的原则就是什么简单用什么,因此这里介绍几种比较简单实用的保留小数位的方法: 方法一:format函数 >>> print('{:.3f}'.format(1.23456)) 1.235 >>> print(format(1.23456, '.2f')) 1.23 正如上面代码所示,format有不同用法,前者使用了占位符{},使用占位符可以同时输出多个,后者一

oracle保留小数,例如0.00

Oracle小数点保留问题 2013-03-03 11:45:49     我来说两句      作者:shm2008520 收藏    我要投稿 Oracle小数点保留问题 如果你在实际应用中需要使用到Oracle小数点保留的问题的话,其实方法很简单我们只用round即可实现(round(_data,2)  ),但是如果其格式不工整的话,你就可以使用round即可,以下是网络搜索到的处理方法: www.2cto.com 方法一:使用to_char的fm格式,即: 1.to_char(round

poi 处理excel 小数问题 整数不保留小数位 整数多.0

读取的单元格为 hssfCell ,传入下面我提供的方法处理默认poi返回的为DOUBLE,所有先转为Long判断下,再进行返回: private String getValue(Cell hssfCell) { if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) { // 返回布尔类型的值 return String.valueOf(hssfCell.getBooleanCellValue()); } else if (hssfC

Oracle保留2位小数

问题来源:项目中会从数据库取出金额(单位分),第三方需要单位为元的金额,这里就涉及保留2位小数的问题 一.格式化函数to_char 这里我汇总这几个to_char(int, text).to_char(float, text).to_char(numeric, text) 这几个函数的功能都是把输入的类型,按照格式化模板text处理,返回对应格式化字符串. 用于上述函数的模板——text: 模板 描述 9 表示该位是数字.小数点左边如果没有数字,那么填充一个空白:小数点右边如果没有数字,则补0

蓝桥杯入门训练——圆的面积(保留小数位)

这一题主要是考察四舍五入,保留小数点后n位 以下是找到的几个保留小数7位的方法 方法一:使用DecimalFormat类 //1.#.00 表示两位小数 #.0000四位小数 以此类推... double d1=3.14159265358979323; DecimalFormat df=new DecimalFormat("#.0000000"); String dd1=df.format(d1); //返回的是一个String类型的值 System.out.println(Doubl

BigDecimal 保留小数位

public class test1_format { public static void main(String[] args) { BigDecimal decimal = new BigDecimal("1.12345"); System.out.println(decimal); BigDecimal setScale = decimal.setScale(4,BigDecimal.ROUND_HALF_DOWN); System.out.println(setScale);