Oracle数据库,数字强制显示2位小数(转)
在银行、财务等对数字要求敏感的系统中,数字的显示一般有着严格的要求。
今遇到一个需求,如题,要求将数字以两位小数的格式显示,如果没有小数,则强制显示为0。
例如:
123.4 显示为 123.40
12 显示为 12.00
0 显示为 0.00
本以为这是个比较简单的问题,Oracle本身提供了to_char函数,带有格式化功能,能够满足条件:
- select to_char(123.4, '9999990.00') as aa from dual;
- select to_char(12, '9999990.00') as aa from dual;
- select to_char(0, '9999990.00') as aa from dual;
- select to_char(123.4, 'fm9999990.00') as aa from dual;
- select to_char(12, 'fm9999990.00') as aa from dual;
- select to_char(0, 'fm9999990.00') as aa from dual;
至此,本以为问题解决了,但是却没有注意到,以上的语句格式化的是字符串,而不是数字!!
需求中,很明确的要求,将数字格式化,结果仍然为数字。
分析:该需求是一个非常常见、且正常的需求,既然Oracle如此强大,应该会提供相关的方法,
于是乎,查找Oracle的相关文档,终于,找到个有个cast函数,该函数负责类型转换,尝试之。
结果显示,该方法确实可行。测试SQL语句如下:
- select CAST(1234.4 AS NUMBER (10, 2) ) as aa from dual ;
- select CAST(12 AS NUMBER (10, 2) ) as aa from dual ;
- select CAST(0 AS NUMBER (10, 2) ) as aa from dual ;
PS:追加一点,字符串可以直接进行类型转换,而无需使用to_number()函数做中间转换。SQL语句如下:
- select CAST('1234.4' AS NUMBER (10, 2) ) as aa from dual ;
- select CAST('12' AS NUMBER (10, 2) ) as aa from dual ;
- select CAST('0' AS NUMBER (10, 2) ) as aa from dual ;
PS:追加第二点,网上看到有人说,小数点后是否显示完全,PL/SQL的版本有关。
本人未做验证,不发表个人意见,仅在此记录一下,如以后遇到问题,再行验证。
另外,我们在使用的时候还会有有以下容易犯的小问题
select to_char(0.413488888, '999,999,990.99999') as aa from dual;
结果: 0.41349,会自动用空格将前面精度不足的位数补齐,另外,,会使用千分位补齐
select to_char(0.413488888, 'fm999,999,990.99999') as aa from dual;
结果:0.41349,结果正常
select to_char(0.413488888, 'fm999,999,999.99999') as aa from dual;
结果:.41349
Oracle数据库,数字强制显示2位小数(转)的更多相关文章
- Oracle数据库,数字强制显示2位小数
在银行.财务等对数字要求敏感的系统中,数字的显示一般有着严格的要求.今遇到一个需求,如题,要求将数字以两位小数的格式显示,如果没有小数,则强制显示为0.例如:123.4 显示为 123.4012 ...
- oracle中数字保留几位小数的问题
需求:#将数字填充到对应金额单中 select substr(b.payMoney,length(b.payMoney),1) 分, substr(b.payMoney,length(b.payMon ...
- Oracle数据库字段保留3位小数,程序读出来显示4位小数
需求 项目需求从字段2位小数,改成3位小数,这事儿好办,数据库噼里啪啦敲了一行代码,发现居然报错,原因是不能修改字段精度问题,然后使用了冒泡排序,搞定 --新增临时字段 ,); --将原字段内容拷贝至 ...
- html模板中的数字保留两位小数
<script> //html模板中的数字保留两位小数 function formatCurrency(num) { num = num.toString().replace(/\$|\, ...
- js只允许输入数字和两位小数
一.js只允许输入数字和两位小数 //只允许输入数字和两位小数 function clearNoNum(obj) { obj.value = obj.value.replace(/[^\d.]/g, ...
- input只能输入数字或两位小数
/** * [只能输入数字和两位小数] * 举例:<input type="text" onkeyup="num(this)" size="10 ...
- vue+element 中 el-input框 限制只能输入数字及一位小数
仅个人经验,希望能帮到有需要的人. 第一次写 就话不多说了直接上代码. <el-input @keyup.native="proving(index)" v-model=&q ...
- Javascript 数字保留2位小数
整理使用Javascript函数将数值保留两位小数: 1.num.toFixed(2) //进位 2.(Math.round(num * 100) / 100).toFixed(2) //进位 3.( ...
- 控制input只能输入数字和两位小数
<input type="text" name="je" onkeyup="clearNoNum(this)" /> funct ...
随机推荐
- 【转】IOS高级教程1:处理1000张图片的内存优化
转载请保留以下原文链接: http://my.oschina.net/taptale/blog/91894 一.项目需求 在实际项目中,用户在上传图片时,有时会一次性上传大量的图片.在上传图片前,我们 ...
- 不小心改了Xcode系统的头文件,运行报错,解决办法
- C语言的传值与传址调用
传值调用并不能改变两个变量的值,而传址能. 为什么,因为,传值调用,仅仅是在函数内,调换参数的值. 而地址所指向的值,改变的不仅仅是函数内,函数外也改变. 请看代码: 这里还要注意:通常我们不会返回局 ...
- IOS开发关于测试的好的网址资源
1. 高级自动化单元测试,推荐看LeanCloud 工程师的李智维的自动化单元测试的直播录影李智维的演示github 2.iOS开发-单元测试 这只是一篇简单的ios测试介绍 3.iOS单元测试 来自 ...
- 谷歌浏览器Chrome安装,报0x80004002 等错误时,乖乖的这么解决!亲测有效。
1.卸载现有的谷歌浏览器,推荐使用360卸载(最好清扫残留文件) 2.在百度搜索中下载一个离线的 chrome浏览器(准备在安全模式先安装),记住,一定不能是谷歌官网的离线包(我屡次尝试安装官方离线包 ...
- Linux写时拷贝技术(copy-on-write)
COW技术初窥: 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内 ...
- 【AdaBoost算法】基于OpenCV实现人脸检测Demo
一.关于检测算法 分类器训练: 通过正样本与负样本训练可得到分类器,opencv有编译好的训练Demo,按要求训练即可生成,这里我们直接使用其已经训练好的分类器检测: 检测过程: 检测过程很简单,可以 ...
- PHP递归创建多级目录(一道面试题的解题过程)
今天看到一道面试题,要写出一个可以创建多级目录的函数: 我的第一个感觉就是用递归创建,具体思路如下: function Directory($dir){ if(is_dir($dir) || @mkd ...
- MySQL中的FEDERATED引擎
首先说明> FEDERATED存储引擎访问在远程数据库的表中的数据,而不是本地的表.这个特性给某些开发应用带来了便利,你可以直接在本地构建一个federated表来连接远程数据表,配置好 ...
- C++ new(2)
1. new与operator new C++中有很多语法让人难以理解,如:new operator(操作符,下同)和operator new之间差异,确切的说,应该是new与operator new ...