【java】java处理随机浮点数(小数点后两位)用RMB的大写数值规则输出
晚上上床前,拿到这个有意思的问题,就想玩弄一番:
============================================================================
规则:【随机浮点数按照RMB读法写出】
总代码如下:
package com.sxd.test; import org.junit.Test; import java.text.DecimalFormat;
import java.util.Random; /**
* @Author SXD
*/
public class RandomTest { @Test
public void createRandom(){
DecimalFormat df = new DecimalFormat("0.00");
Random random = new Random();
double aa = (random.nextDouble())*(random.nextInt(Integer.MAX_VALUE));
System.out.println(df.format(aa));
System.out.println(deal4RMB(df.format(aa)));
} /**
* 从小数点为分界线,往前迭代处理+往后拼接角分+部分规则
* @param dbNum 随机浮点数值
* @return 转化后的RMB大写数值描述
*/
private String deal4RMB(String dbNum){
String sb = "";
try {
int point = dbNum.lastIndexOf(".");
char [] charArr = dbNum.toCharArray();
for (int i = 1; i <= point; i++) {
String flag = getUpperCase(charArr[point-i],i);
sb = flag + sb ;
if("error".equals(flag)){
return "转化异常";
}
}
sb = dealString(sb);
sb = sb+"元"+getUpperCase(charArr[point+1],-1)+getUpperCase(charArr[point+2],-2);
}catch (Exception e){
System.out.println(e);
return "转化异常";
}
return sb;
} /**
* 替换中文RMB计数 + 部分规则
* @param a 数值
* @param i 位置
* @return 数值+位置
*/
private String getUpperCase(char a,int i){
//本位值为0 并且 本位位置在个位 小数点后一位 小数点后两位
//不做任何返回操作
if('0' == a && (i==1 || i==-1 || i==-2)){
return "";
}
//本位值为0 并且 本位位置在万位
//仅返回 万 而不是几万
if ('0' == a && i==5) {
return "万";
} //本位数字转化的汉字大写数字
String flag = "";
//本位位置对应 【分 角 个 十 百 千 万 亿】
String flag2 = ""; switch (a){
case '0' : flag = "零";break;
case '1' : flag = "壹";break;
case '2' : flag = "贰";break;
case '3' : flag = "叁";break;
case '4' : flag = "肆";break;
case '5' : flag = "伍";break;
case '6' : flag = "陆";break;
case '7' : flag = "柒";break;
case '8' : flag = "捌";break;
case '9' : flag = "玖";break; default : flag = "error";
} //本位为零 不拼接本位位置 【除万位 上方已经单独处理】
if(!"零".equals(flag)){
switch (i){
case -1: flag2 = "角";break;
case -2: flag2 = "分";break;
case 2:
case 6:
case 10: flag2 = "十";break; case 3:
case 7:
case 11: flag2 = "百";break; case 4:
case 8: flag2 = "千";break; case 5: flag2 = "万";break;
case 9: flag2 = "亿";break; default: flag2 = "";
}
} /**
* 本处处理未完善
*因为随机数 Integer位数达到10位以上的概率很大
*因此处理时仅处理了 壹十贰亿几千几百万 这种情况
*若随机数级别在十万位 依旧会出现 壹十几万几千几百
*若随机数级别在十位 依旧会出现 壹十几点几情况
*
* 若要完全处理,仅需要先判断随机数总位数,而后再判断i的值为第几位再特殊处理即可~~
*/
if("壹".equals(flag) && "十".equals(flag2) && i == 10){
return flag2;
} //返回 数值+位置
return flag+flag2;
} /**
* 去除重复零 + 部分规则
* @param rmbStr
* @return
*/
private String dealString(String rmbStr){
while(rmbStr.indexOf("零零") >= 0){
rmbStr = rmbStr.replace("零零","零");
} //判断个位是否依旧为零 若为零 截取字符串即可
char [] arr = rmbStr.toCharArray();
if('零' == arr[arr.length-1]){
rmbStr = rmbStr.substring(0,rmbStr.length()-1);
}
return rmbStr;
} }
效果展示:
【java】java处理随机浮点数(小数点后两位)用RMB的大写数值规则输出的更多相关文章
- JAVA除法保留小数点后两位的两种方法 Java Math的 floor,round和ceil的总结
floor 返回不大于的最大整数 round 则是4舍5入的计算,入的时候是到大于它的整数round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下 ...
- java 取小数点后两位 不四舍五入,怎么做
java 取小数点后两位 不四舍五入,怎么做 正常版: //正常版: import java.text.DecimalFormat; import java.math.RoundingMode; De ...
- Java中double类型的数据精确到小数点后两位
Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585;BigDecimal b = new BigDecimal(f); d ...
- Java中取小数点后两位(四种方法)
摘自http://irobot.iteye.com/blog/285537 Java中取小数点后两位(四种方法) 一 Long是长整型,怎么有小数,是double吧 java.text.D ...
- java取小数点后两位
package com.yonyou.sud.algorithm; import java.math.BigDecimal;import java.text.DecimalFormat;/*** ja ...
- java 关于数字取小数点后两位出现整数0没有的问题
最近再项目中对取到的一系列带很长小数的数字,展现时要求去小数点后两位显示就可以了 开始我是以下写法: double a = 0.1234455; DecimalFormat decimalForm ...
- Android(java)开发之将double类型,强制保留到小数点后两位解决方法。
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 前提:当我们进行double数据类型与double进行运算的时候,可能会遇到 得到小数点后好多位,但是 ...
- mysql格式化小数保留小数点后两位(小数点格式化)
格式化浮点数的问题,用format(col,2)保留两位小数点,出现一个问题,例如下面的语句,后面我们给出解决方法 SELECT FORMAT(12562.6655,2); 结果:12,562.67 ...
- 控制input标签中只能输入数字以及小数点后两位
js 代码如下: /* 控制input标签中只能输入数字 和小数点后两位 */ function checkNum(obj) { //检查是否是非数字值 if (isNaN(obj.value)) { ...
随机推荐
- 赢友网络通用框架V10.0.0(WinuAppSoft) 基础框架设计表
/* * 版权所有:赢友网络(http://www.winu.net/) * 开发人员:新生帝(JsonLei) * 设计名称:赢友网络通用框架V10.0.0(WinuAppSoft) * 设计时间: ...
- Asp.net Mvc 页面静态化
http://www.cnblogs.com/gowhy/archive/2013/01/01/2841472.html
- Python框架之Django学习笔记(二)
安装Django 我是在windows下安装的python以及django,下面的链接可以下载Django: http://www.djangoproject.com/download/ 1.下载 D ...
- 如何理解显示卡的驱动模块(DDX,DRM,DRI,XVMC)
如何理解显示卡的驱动模块(DDX,DRM,DRI,XVMC) 1)DDX是什么 DDX是X服务器的2D驱动模块,例如via_drv.so. 2D的显示加速,包括xvideo也是由它负责. 它会初始化硬 ...
- 查找String中出现最多字符的次数和个数
Sting 的charAt方法返回相应位置的字符,使用该方法遍历String,将每个字符存入对象属性,遍历属性得到最多字符个数 <!DOCTYPE html> <html> & ...
- Eclipse SVN冲突详细解决方案
大家一起开发,难免有时会同时修改同一个文件,这样就要学会解决冲突.当大家更新代码,发现以下情况的时候,就说明你的修改的文件和服务器的文件产生了冲突(一般是别人也改了同一个文件). 1)和服务 ...
- 洛谷 P1783 海滩防御
题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭.于是,WLP动用了他 ...
- EasyUI-Accordion
EasyUI-Accordion Accordion英文翻译就是 手风琴活 或者 可折叠的 参考效果图: 从图中我们其实也可以将这种组件理解为手风琴式的组件. 该组件方便对数据进行分类管理,在有限空间 ...
- 显示3行,还要省略号(这个属性比较合适WebKit浏览器或移动端(绝大部分是WebKit内核的)浏览器)
div{ overflow : hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp:; -webkit- ...
- O(∩_∩)O哈哈~
原文发布时间为:2009-04-30 -- 来源于本人的百度文章 [由搬家工具导入]