问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JAVA编写 将阿拉伯数字转换成中文大写(不要Script的)

发布网友 发布时间:2022-04-25 00:00

我来回答

5个回答

热心网友 时间:2022-04-25 01:29

public class MoneyUtil {

public static String[] chineseDigits = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};

/**
* 把金额转换为汉字表示的数量,小数点后四舍五入保留两位
* @param amount
* @return
*/
public static String amountToChinese(double amount) {

if(amount > 99999999999999.99 || amount < -99999999999999.99)
throw new IllegalArgumentException("参数值超出允许范围 (-99999999999999.99 ~ 99999999999999.99)!");

boolean negative = false;
if(amount < 0) {
negative = true;
amount = amount * (-1);
}

long temp = Math.round(amount * 100);
int numFen = (int)(temp % 10); // 分
temp = temp / 10;
int numJiao = (int)(temp % 10); //角
temp = temp / 10;
//temp 目前是金额的整数部分

int[] parts = new int[20]; // 其中的元素是把原来金额整数部分分割为值在 0~9999 之间的数的各个部分
int numParts = 0; // 记录把原来金额整数部分分割为了几个部分(每部分都在 0~9999 之间)
for(int i=0; ; i++) {
if(temp ==0)
break;
int part = (int)(temp % 10000);
parts[i] = part;
numParts ++;
temp = temp / 10000;
}

boolean beforeWanIsZero = true; // 标志“万”下面一级是不是 0

String chineseStr = "";
for(int i=0; i<numParts; i++) {

String partChinese = partTranslate(parts[i]);
if(i % 2 == 0) {
if("".equals(partChinese))
beforeWanIsZero = true;
else
beforeWanIsZero = false;
}

if(i != 0) {
if(i % 2 == 0)
chineseStr = "亿" + chineseStr;
else {
if("".equals(partChinese) && !beforeWanIsZero) // 如果“万”对应的 part 为 0,而“万”下面一级不为 0,则不加“万”,而加“零”
chineseStr = "零" + chineseStr;
else {
if(parts[i-1] < 1000 && parts[i-1] > 0) // 如果"万"的部分不为 0, 而"万"前面的部分小于 1000 大于 0, 则万后面应该跟“零”
chineseStr = "零" + chineseStr;
chineseStr = "万" + chineseStr;
}
}
}
chineseStr = partChinese + chineseStr;
}

if("".equals(chineseStr)) // 整数部分为 0, 则表达为"零元"
chineseStr = chineseDigits[0];
else if(negative) // 整数部分不为 0, 并且原金额为负数
chineseStr = "负" + chineseStr;

chineseStr = chineseStr + "元";

if(numFen == 0 && numJiao == 0) {
chineseStr = chineseStr + "整";
}
else if(numFen == 0) { // 0 分,角数不为 0
chineseStr = chineseStr + chineseDigits[numJiao] + "角";
}
else { // “分”数不为 0
if(numJiao == 0)
chineseStr = chineseStr + "零" + chineseDigits[numFen] + "分";
else
chineseStr = chineseStr + chineseDigits[numJiao] + "角" + chineseDigits[numFen] + "分";
}

return chineseStr;

}

/**
* 把一个 0~9999 之间的整数转换为汉字的字符串,如果是 0 则返回 ""
* @param amountPart
* @return
*/
private static String partTranslate(int amountPart) {

if(amountPart < 0 || amountPart > 10000) {
throw new IllegalArgumentException("参数必须是大于等于 0,小于 10000 的整数!");
}

String[] units = new String[] {"", "拾", "佰", "仟"};

int temp = amountPart;

String amountStr = new Integer(amountPart).toString();
int amountStrLength = amountStr.length();
boolean lastIsZero = true; //在从低位往高位循环时,记录上一位数字是不是 0
String chineseStr = "";

for(int i=0; i<amountStrLength; i++) {
if(temp == 0) // 高位已无数据
break;
int digit = temp % 10;
if(digit == 0) { // 取到的数字为 0
if(!lastIsZero) //前一个数字不是 0,则在当前汉字串前加“零”字;
chineseStr = "零" + chineseStr;
lastIsZero = true;
}
else { // 取到的数字不是 0
chineseStr = chineseDigits[digit] + units[i] + chineseStr;
lastIsZero = false;
}
temp = temp / 10;
}
return chineseStr;
}

public static void main(String[] args) {

if(args.length == 0) {
System.out.println("转换演示:");
System.out.println("-------------------------");
System.out.println("25000000000005.999: " + amountToChinese(25000000000005.999));
System.out.println("45689263.626: " + amountToChinese(45689263.626));
System.out.println("0.69457: " + amountToChinese(0.69457));
System.out.println("253.0: " + amountToChinese(253.0));
System.out.println("0: " + amountToChinese(0));
System.out.println("-------------------------");

//System.out.println(Long.MAX_VALUE);
//System.out.println(Long.MIN_VALUE);
}
else {
System.out.println("转换结果:");
System.out.println(args[0] + ": " + amountToChinese(Double.parseDouble(args[0])));
}

}

}

热心网友 时间:2022-04-25 02:47

import java.io.*;
public class test{
public static void main(String args[])
{
try{
System.out.print("输入数字:");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String s=br.readLine();
char[] c=new char[s.length()];
c=s.toCharArray();
for(int i=0;i<s.length();i++){
if(c[i]=='1')c[i]='壹';
if(c[i]=='2')c[i]='贰';
if(c[i]=='3')c[i]='叁';
if(c[i]=='4')c[i]='肆';
if(c[i]=='5')c[i]='伍';
if(c[i]=='6')c[i]='陆';
if(c[i]=='7')c[i]='柒';
if(c[i]=='8')c[i]='捌';
if(c[i]=='9')c[i]='玖';
if(c[i]=='0')c[i]='零';
System.out.print(c[i]);
}
System.out.println();
}
catch(Exception e){
}

}
}

热心网友 时间:2022-04-25 04:22

class MoneyFormat{
private final String [] pattern ={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
private final String [] cPattern ={"","拾","佰","仟","万","拾","佰","仟","亿"};
private final String [] cfPattern = {"","角","分"};
private final String ZEOR = "零";
public MoneyFormat(){

}

public String format(String moneyString){
int dotPoint = moneyString.indexOf("."); //判断是否为小数
String moneyStr;
if(dotPoint != -1){
moneyStr = moneyString.substring(0,moneyString.indexOf("."));
}
else{
moneyStr = moneyString;
}
StringBuffer fraction = null; //小数部分的处理,以及最后的yuan.
StringBuffer ms = new StringBuffer();
for(int i = 0;i < moneyStr.length();i++){
ms.append(pattern[moneyStr.charAt(i) - 48]); //按数组的编号加入对应大写汉字
}

int cpCursor = 1;
for(int j = moneyStr.length() - 1;j > 0;j--){
ms.insert(j,cPattern[cpCursor]); //在j之后加字符,不影响j对原字符串的相对位置
//只是moneyStr.length()不断增加
//insert(j,"string")就在j位置处插入,j=0时为第一位
cpCursor = cpCursor == 8?1:cpCursor + 1; //亿位之后重新循环
}

while(ms.indexOf("零拾") != -1){ //当十位为零时用一个"零"代替"零拾"
//replace的起始于终止位置
ms.replace(ms.indexOf("零拾"),ms.indexOf("零拾") + 2,ZEOR);
}
while(ms.indexOf("零佰") != -1){ //当百位为零时,同理
ms.replace(ms.indexOf("零佰"),ms.indexOf("零佰") + 2,ZEOR);
}
while(ms.indexOf("零仟") != -1){ //同理
ms.replace(ms.indexOf("零仟"),ms.indexOf("零仟") + 2,ZEOR);
}
while(ms.indexOf("零万") != -1){ //万需保留,中文习惯
ms.replace(ms.indexOf("零万"),ms.indexOf("零万") + 2,"万");
}
while(ms.indexOf("零亿") != -1){ //同上
ms.replace(ms.indexOf("零亿"),ms.indexOf("零亿") + 2,"亿");
}
while(ms.indexOf("零零") != -1){//有连续数位出现零,即有以下情况,此时根据习惯保留一个零即可
ms.replace(ms.indexOf("零零"),ms.indexOf("零零") + 2,ZEOR);
}
while(ms.indexOf("亿万") != -1){ //特殊情况,如:100000000,根据习惯保留高位
ms.replace(ms.indexOf("亿万"),ms.indexOf("亿万") + 2,"亿");
}
while(ms.lastIndexOf("零") == ms.length()-1){ //当结尾为零j,不必显示,经过处理也只可能出现一个零
ms.delete(ms.lastIndexOf("零"),ms.lastIndexOf("零") + 1);
}

int end;
if((dotPoint = moneyString.indexOf(".")) != -1 ){ //是小数的进入
String fs = moneyString.substring(dotPoint + 1,moneyString.length());
if(fs.indexOf("00") == -1 || fs.indexOf("00") >= 2){//若前两位小数全为零,则跳过操作
end = fs.length() > 2?2:fs.length(); //仅保留两位小数
fraction = new StringBuffer(fs.substring(0,end));
for(int j = 0;j < fraction.length();j++){
fraction.replace(j,j+1,this.pattern[fraction.charAt(j) - 48]); //替换大写汉字
}
for(int i = fraction.length();i > 0;i--){ //插入中文标识
fraction.insert(i,cfPattern[i]);
}
fraction.insert(0,"元"); //为整数部分添加标识
}
else{
fraction = new StringBuffer("元整");
}

}
else{
fraction = new StringBuffer("元整");
}

ms.append(fraction); //加入小数部分
return ms.toString();
}

public static void main(String [] ar){
System.out.println(new MoneyFormat().format("10005022.123009"));
}
}

热心网友 时间:2022-04-25 06:13

这么多答案看得我都晕了...

我也不回答了,

留个印吧

热心网友 时间:2022-04-25 08:21

public class ChangeNum{
private String ch_Char;
private String [] ch_Chars = new String[]{"一","二","三","四","五","六","七","八","九","十"};
void setNum(int num){
if(num<=0 || num>=11){
// Err Info.........
}
ch_Char = ch_Chars[num-1];
}
public String getNum(){
return ch_Char;
}
}

main方法就不用给出了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 消防器材的销售怎么跑 dataworks的任务调度底层是什么 没有java基础学flink要多久 追你一世的介绍 致命弯道系列电影 大话西游之爱你一万年 手机在哪看免费 写请柬怎么称呼 写请帖的格式和称呼 给领导写请帖怎么称呼 0ppoK3手机重起应用怎么用 写请贴的称呼 100000印度尼西亚货币能换多少人民币? 印尼的2000元纸币 求警视厅零系生活安全科万能咨询室第五季高清百度云资源 日剧 警视厅搜查一课9系1-12季+SP,百度云盘分享一下,谢谢 求警视厅零系生活安全科万能咨询室第四季高清百度云资源 哪位大神有绝对零度第一季2010年上映的由 上户彩主演的百度网盘资源吗 如何评价小泉孝太郎?,, 别人设置朋友圈都是显示仅展示最近三天 而我设置就是一条白线 求《警视厅生物股长(2017)》百度网盘高清资源在线观看,木下高男导演的 消防器材业务怎么跑.我刚开始跑也找不到头绪 flinkcep最后一条数据怎么触发 开消防器材专卖店怎么经营比较好,没有做过,靠关系以外还怎么跑业务 如何才能做好消防器材的业务工作?请有这方面知识的人士回答,不胜感激! 详细的我我采纳了 谢谢~!!!! 消防器材的业务怎么跑啊 我是做消防器材的,出去跑生意,怎样才能劝客户充灭火器呢 做消防交通设施怎么跑业务? 卖消防器材跑业务需要做什么准备 我是做消防器材的,业务都是自己跑的,请高手指教如何过通过门卫那关啊, 或如何能进去联系到负责人啊谢谢 Excel 怎么忽略空格和横杠进行模糊搜索呢 excel筛选框里横杠输不了文字 延毕的毕业生的档案怎么处理 EXCEL中,如何获取1/2后面横杠的数据? 延期毕业,第三方已签,档案到底在哪里? 延期毕业,第三方已签,档案到底在哪里 我被大专延迟毕业了怎么办? 大学延时毕业档案是留在学校还是发回当地 延迟毕业档案还能拿回学校吗 延迟毕业2年,签了三方协议,拿到毕业证以后,档案在哪 本科生延迟毕业,已经找到工作签了合同,单位需要档案,档案现在在学校,可以提出来吗?