千亿级别数字的人民币读法

</pre><pre name="code" class="java">package com.sungeo;
/**
 * 人民币的读法是四位一节;  x仟x百x拾 x  (亿)     x仟x百x拾 x  (万) x仟x百x拾 x
 * @author Administrator
 */
public class NumToRmb {
	private String[] hanArr=new String[]{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
	private String[] unitArr=new String[]{"拾","百","仟"};
	private String[] wyArr=new String[]{"万","亿"};
	private static String[]  xiaoArr=new String[]{"分","角","圆"};

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		NumToRmb toRMB=new NumToRmb();
		String[] arr=toRMB.divideDouble(12001234.12);//输入数字,变成保留两位小数的人民币读法,支持千亿级别的人民币读法
		int len=checkLength(arr[0]);
		String readHan="";
		if(len<=4){
			readHan=toRMB.readZheng4(arr[0]);
		}else if(len<=8){
			readHan=toRMB.readZheng8(arr[0]);
		}else if(len<=12){
			readHan=toRMB.readZheng12(arr[0]);
		}else {
			System.out.println("只支持千亿级读法!");
		}

		System.out.println(readHan+(readHan==""?"":xiaoArr[2])+toRMB.readXiao(arr[1]));
	}

	private static int checkLength(String str){
		return str.length();
	}
	/**
	 *  长度小于等于12的整数读法
	 */
	private String readZheng12(String numStr){
		String result="";
		String last8Str=numStr.substring(numStr.length()-8);
		String result8=readZheng8(last8Str);
		String first=numStr.substring(0, numStr.length()-8);
		String firstStr=readZheng4(first);
		result=firstStr+wyArr[1]+result8;
		return result;
	}
	/**
	 * 长度小于等于8的整数读法
	 * @param numStr
	 * @return
	 */
	private String readZheng8(String numStr){
		String result="";
		String last4Str=numStr.substring(numStr.length()-4);
		String result4=readZheng4(last4Str);
		String first=numStr.substring(0, numStr.length()-4);
		String firstStr=readZheng4(first);
		result=firstStr+wyArr[0]+result4;
		return result;
	}

	/**
	 *长度小于等于4的整数的读法
	 */
	private String readZheng4(String numStr){
		String result="";
		for(int i=0;i<numStr.length();i++){
			int num=numStr.charAt(i)-48;//‘4’->4;
			if(num!=0&&i!=numStr.length()-1){
				result+=hanArr[num]+unitArr[numStr.length()-i-2];
			}else if(num==0){ //中间为0的不读取
			}else {
				result+=hanArr[num];
			}
		}
		return result;
	}

	/**
	 * 小数的读法
	 */
	private String readXiao(String xiaoStr){
		String result="";
		for(int i=0;i<xiaoStr.length();i++){
			int num=xiaoStr.charAt(i)-48;//‘4’->4;
			if(num!=0 ){
				result+=hanArr[num]+xiaoArr[xiaoArr.length-i-2];
			}
		}
		return result;
	}

	/**
	 * 将一个double数分割成小数和整数两部分;   3.14d -> {"3","14"}
	 * @param d  要分割的double 数
	 * @return   整数和小数形成的字符串数组
	 */
	private String[] divideDouble(double d){
		if(d<=0){
			System.out.println("请输入有效金额!");
		}
		String zheng=(long)d+"";
		String xiao=(long)Math.round((d%1*100))+"";
		return new String[]{zheng,xiao};
	}

}

千亿级别数字的人民币读法

时间: 2024-07-29 21:39:24

千亿级别数字的人民币读法的相关文章

数字转人民币读法

han_list=["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"] unit_list=["拾","佰","仟"] #把整数部分和小数部分转化为字符串,并存入元组作为返回值 def devide(num): inte

Python学习之--数字转人民币读法(解决问题的方法很重要)

效果图: 实现代码: money = float(input("Please input the money:"))cop = int(money)Num = ['零','壹','贰','叁','肆','伍','陆','柒','捌','镹']#用于存转换后的汉字UnitZ = ['','仟','佰','十']#存转换需要的单位(4数字一循环)Integer = []#存整数部分每一位数字Decimal = []#存小数部分每一位数字(一共两位,精确到分)Zheng = copXiao

下一波千亿级富豪将要的这些产业,你入对行了吗

在中国A股市场上,大约只有23家市值千亿级别的大公司,这些大多数是在政府垄断行业如金融,石油,电力,汽车等行业,国有四大银行总市值约3.9万亿人民币.而在互联网行业,中国互联网产业目前有三大巨头,百度(830亿美元),阿里巴巴(2400亿美元),腾讯(1500亿美元),这些都是千亿级的. 中国企业需要千亿级公司去引领,去推动新兴产业的发展.联想,海尔,华为他们都感受到阵阵寒意,“中国制造”优势即将挥霍殆尽,人口福利终将消失,而是外部世界级公司已经摩拳擦掌,咄咄逼人,他们已经开始全面进攻中国的大市

Java浮点数转人民币读法

把[整数部分]的数字,由个位开始,4个数字分为一组,最高位没有数字就补0,并记录总共的数组个数,总共有3组,也就3*4的二维数组: 对于每个数组统一处理,最后将最开头的"零去掉",将"亿"."万""元"字前面的"零"去掉: 当读取到0时,检查它的上一位是否为0,如果上一位是0,则不做处理,如果上一位不是0或者上一位不存在,均记下"零": 读取每个数字,转换为对应的大写汉字,并加上权重&q

java实战1——浮点数转人民币读法

为了学习安卓,现在开始从C++角度来学习Java,现在看到了<疯狂java讲义>的第四章,里面有个字符串转人民币的例子,书上没做完,于是把其补充完善.其中最难的部分就是根据零在不同位置,具有不同行为.按照中文读法,有些零要读出,有些零不需要读出.下面将按照两部分进行讲解,首先举一个例子来说明思路,其次给出Java的源代码供参考,并且进行测试.这个问题主要利用字符串数组来解决.我们假定要转换的浮点数整数部分不超过12位. (1) 思路 1.1 分割整数和小数部分 对于一个浮点数,先来看个简单点,

java程序---将一个浮点数转换成人民币读法

代码如下: <span style="font-size:18px;">package test; import java.util.Scanner; //将输入的浮点型钱数,转成人民币读法 public class Num2Rmb { private static double num; private long zheng,xiao; private String[] hanArr={"零","壹","贰",&

【创业邦&#183;年度创业人物】刘强东:十年战争与千亿美金帝国梦

文|沈凌莉 "拍得含情脉脉一点,不然又被人说我张扬."刘强东配合着摄影师拍照,一边开着玩笑.他身穿修身西装搭牛仔裤,不时面露笑容,表情认真. 拍照地点在员工活动室,这里颇有互联网公司的味道,色调鲜艳明亮,配有各式各样的座椅,还有堆满毛绒玩具的儿童室. "你觉得这几年他的状态有变化吗?"拍完出来,<创业邦>记者问摄影师.他从京东的办公地点还在中关村时就开始拍刘强东,几乎每年都要拍一次. "他现在显得放松一些了,以前总感觉压力很大的样子."

阿里云+好未来,将整合千亿互联网+教育大市场?

(上图为好未来集团总裁白云峰) 在线教育其实已经有很多年的历史.最早从1994年-1996年国家教委大力支持远程教育开始,在1996-2000年间随着高等学历在线教育的发展而迎来了繁荣期,一大批网校出现.多媒体教学雨后春笋般涌现.到2000年-2010年,出现了在线教育企业上市热潮.2010年开始,大量资本涌入在线教育领域. 据艾瑞数据,中国在线教育市场规模在2015年首次超过千亿达1191.7亿元人民币,2016年达到1560.2亿元实现同比增长27.3%,预计到2018年突破2000亿元达2

机器学习如何撬开千亿视频商业化大市场?

(上图为智能视频图像分析创业公司Viscovery CEO黄俊杰) 在线视频正在迅速成长为一个巨大的市场.根据今年6月发布的思科Visual Networking Index(VNI)报告显示,到2020年视频将占消费互联网流量的82%,2015 年到 2020 年互联网视频监控流量将增长十倍.全球虚拟现实流量将增长61倍.在中国市场,根据市场调查公司艾瑞的预测,在线视频市场将在2018年达近千亿人民币规模. 面对这样一个视频大市场,如何进行视频的商业化转化,是所有运营商和互联网公司关注的焦点.