文档章节

sql处理数据保留小数点后两位

_Tomorrow
 _Tomorrow
发布于 2016/04/25 21:43
字数 560
阅读 1249
收藏 1

最近处理报表,格式化数据,保留小数点后两位数字,因为添加数据的逻辑比较复杂,所以选择在查询的时候处理数据,所以就用到了很多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的个数要已知,否则会出现超过的数字显示为########的情况。 

方法四:使用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;


© 著作权归作者所有

_Tomorrow
粉丝 4
博文 21
码字总数 2621
作品 0
青岛
项目经理
私信 提问
freemarker 数字格式化

freemarker数字格式化可以在两个地方设置,一个是全局的,即在freemarker.properties文件中设置number_format,还有一个是使用string指令来控制数据的输出格式。例如: ${num?string('0.00')...

K_ONE
2016/02/24
34
0
java 数字保留2位小数 格式化为价格类型

ava保留两位小数问题: 方式一: double f = 3.1516;BigDecimal b = new BigDecimal(f);double f1 = b.setScale(2, BigDecimal.ROUNDHALFUP).doubleValue();方式一中使用BigDecimal中的设置精......

Code辉
2018/09/17
0
0
数值保留小数点两位,但同时去除小数点后多余0 的 javascript、java实现

今天碰到一个需求。关于小数点的处理,看起来非常简单的事情,却花了一定时间做了一些试验。最后简单总结一下,以便备忘。 需求简化一下表达是这样的: 有A、B两列,A/B=C。这3列在数据库中都...

文文1
2016/11/25
145
0
freemarker 数字格式化(金额格式化)

${num?string('0.00')} 如果小数点后不足两位,用 0 代替 ${num?string('#.##')} 如果小数点后多余两位,就只保留两位,否则输出实际值 输出为:1239765.46 ${num?string(',###.00')} 输出为......

鱼煎
04/20
0
0
freemarker 数字格式化深入理解

一、使用内建函数c 特点: 不管其表现形式是怎样的(例如"123,456.123,456"、"123456.123456"、"000123456.123456000"、"123,456.123456"、"1,2345,6.123456"),只要小数分割符是'.'它就能转......

毛朱
2013/01/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

好文:华杉:我等用功,不求日增,但求日减。减一分人欲,则增一分天理,这是何等简易!何等洒脱!

华杉华与华营销咨询公司董事长 华杉 做企业就得遵守三大定律 今天我给大家带来的这个题目比较大,叫做《企业三大定律》。 首先我们得明白定律是什么? 定律在英文里面叫law,定律就是法律。做...

阿锋zxf
14分钟前
1
0
vue 的bus总线

bus声明 global.bus = new Vue() 事件发送 controlTabbar () {global.bus.$emit('pickUp', 'ddd')}, 事件接收 global.bus.$on('pickUp', (res) => {this.isFocus = true})......

Js_Mei
19分钟前
2
0
大型系统演进之路-负载均衡演进

Nginx做负载均衡 通过Nginx的反向代理将请求分发到tomcat中,如果tomcat支持100并发,Nginx支持50000并发,理论上nginx把请求发送到500个tomcat就可以了。 LVS或F5做多个Nginx负载均衡 Tomc...

春哥大魔王的博客
24分钟前
4
0
Sqlite时间段查询中遇到的问题

问题: 我要查询DateTime时间其中的一段符合时间要求的数据,比如我要查询‘2019-06-06 16:50:00’至‘2019-06-06 16:59:00’这一段的数据 开始用这段代码 strSql= ("select * from Coll...

rainbowcode
28分钟前
2
0
大数据(hadoop-数据入库系统Sqoop原理架构)

Sqoop是什么 Sqoop:SQL-to-Hadoop 连接传统关系型数据库和Hadoop的桥梁 把关系型数据库的数据导入到 Hadoop 系统 ( 如 HDFS、HBase 和 Hive) 中; 把数据从 Hadoop 系统里抽取并导出到关系型...

这很耳东先生
42分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部