最近看到一个把一个浮点数转化为汉字人民币的小题,感觉很有意思就去用java实现了一下,没想到没有想得那么简单,在网上搜了一下也不近人意,经过几次修改后,现在实现了,现在分享一下。

一、当输入一个浮点数后,我们要把它的整数部分和小数部分取出来。

二、然后把相应的整数、小数部分转化为汉字读法。

三、按照汉语的读法,不能存在零仟、零佰、零拾这样的读法但可以存在零万、零元等读法,这时候我们壹仟零佰零拾零陆圆把零佰、零拾这样的替换为零,变为壹仟零零陆圆,我们把连续为零零的替换为零就OK了。

package test;

public class NumToRmb{
private static String[] hangArr = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
private static String[] unitArr = { "圆", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰" };
private static String[] unitXiaoArr = { "分", "角" }; // 把一个浮点数分为整数和小数
public static String[] divide(double num) {
long zheng = (long) num;
long xiao = Math.round((num - zheng) * 100);
String[] arr = new String[] { String.valueOf(zheng), String.valueOf(xiao) };
return arr;
}
// 把一个4位数转化为汉字
public static String toHantr(double numStr) {
if (numStr < 0) {
System.out.print("请输入一个整数");
}
String[] arr1 = divide(numStr);
// 得到整数部分
String zheng = arr1[0];
// 得到小数部分
String xiao = arr1[1];
String result = "";
// 处理整数部分
int numLen = zheng.length(); for (int i = 0; i < numLen; i++) {
// 得到第i位的数值
int num = zheng.charAt(i) - '0';
// 数值的汉字表示
result += hangArr[num] + unitArr[numLen - 1 - i];
}
// 处理小数部分
int sumLen = xiao.length();
for (int i = 0; i < sumLen; i++) {
if (i > 2)
break;// 只精确到后两位
// 得到第i位的数值
int xnum = xiao.charAt(i) - '0';
// 数值的汉字表示
result += hangArr[xnum] + unitXiaoArr[sumLen - 1 - i];
}
// //替换所有零拾,零百,零仟为零
result = result.replaceAll("零拾", "零");
result = result.replaceAll("零佰", "零");
result = result.replaceAll("零仟", "零");
//把零零替换为零
if (result.indexOf("零零") != -1) {
result = result.replaceAll("零零", "零");
}
result = result.replaceAll("零亿", "亿");
result = result.replaceAll("零万", "万");
result = result.replaceAll("零圆", "圆"); return result;
}
public static void main(String[] args) {
System.out.print(toHantr(1213301.56));
}
}

人民币金额转化汉字的java写法的更多相关文章

  1. C#小写数字金额转换成大写人民币金额的算法

    C#小写数字金额转换成大写人民币金额的算法 第一种方法: using System.Text.RegularExpressions;//首先引入命名空间 private string DaXie(st ...

  2. 【转载】C#工具类:人民币金额转换为中文大写

    在涉及到金融业务这一块的系统设计中,时常能够遇到的情况是需要将阿拉伯数字的人民币金额自动转换为中文的大写金额.现在互联网上也有很多网站提供此类服务,只要你输入人民币的阿拉伯数字金额,输入后自动给你转换 ...

  3. ACM java写法入门

    打2017icpc沈阳站的时候遇到了大数的运算,发现java与c++比起来真的很赖皮,竟然还有大数运算的函数,为了以后打比赛更快的写出大数的算法并且保证不错,特意在此写一篇博客, 记录java的大数运 ...

  4. Python TIPS上一道关于人民币金额小写转大写的题

    人民币金额打印 题目链接:here.我发现我写的好复杂,但万幸编码还算符合人类,看了其他答案,感觉都是天书. #!/usr/bin/env python # -*- coding: utf-8 -*- ...

  5. 基于opencv将视频转化为字符串Java版

    基于opencv将视频转化为字符串Java版 opencv java  先上一个效果图吧 首先,弄清一下原理 我们要将视频转化为字符画,那么就需要获取画面的每一帧,也就是每一张图片,然后将图片进行转化 ...

  6. C# 使用TimeSpan秒数转化为时分秒的写法

    1.TimeSpan的生成方法 // 参数: // ticks: // A time period expressed in 100-nanosecond units. public TimeSpan ...

  7. java数字金额转化为中文金额

    public static String digitUppercase(double n){String fraction[] = {"角", "分"};Str ...

  8. java-汉字转化拼音(纯java)

    1.转换所有的拼音 import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Set; public cl ...

  9. 获取汉字拼音 Java

    两种方法:一个是使用btye数组,一个是引入jar包进行操作. 1. public class CharacterParser { private static int[] pyvalue = new ...

随机推荐

  1. 压力测试 JMeter3.3

    历史下载版本 https://archive.apache.org/dist/jmeter/source/

  2. http-server使用

    https://segmentfault.com/q/1010000003926981

  3. IOS (补充)触摸事件处理

    [1]事件的基本概念 UIEvent:事件,是由硬件捕捉的一个表示用户操作设备的对象. 分三类:触摸事件.晃动事件.远程控制事件 触摸事件:用户通过触摸设备屏幕操作对象.输入数据.支持多点触摸,包括1 ...

  4. Linux驱动程序:统计单词个数

    本例为Android升读探索(卷1):HAL与驱动开发 一书中附带的演示样例程序.现粘贴出来,以便查阅. 终端操作,可能用到的命令: insmond word_count.ko lsmod | gre ...

  5. Java内存区域与各区域OOM

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6534990.html  JVM的组成在上一篇博文已经介绍了,现在我们专门深入Java运行时数据区. 1:程序计 ...

  6. JSP之include动态包含与静态包含

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6044676.html JSP中,include是一个经常用到的标签.当应用程序中所有的页面的某些部分(如标题. ...

  7. 基于SQL和PYTHON的数据库数据查询select语句

    #xiaodeng#python3#基于SQL和PYTHON的数据库数据查询语句import pymysql #1.基本用法cur.execute("select * from biao&q ...

  8. java中使用相对路径读取文件的写法总结 ,以及getResourceAsStream() (转)

    https://blog.csdn.net/my__sun_/article/details/74450241 读取文件的写法,相对路径 在当前的目录结构中读取test.txt的有四种写法 简单粗暴的 ...

  9. Quartz.NET开源作业调度框架系列(四):Plugin Job-转

    如果在Quartz.NET作业运行时我们想动态修改Job和Trigger的绑定关系,同时修改一些参数那么该怎么办呢?Quartz.NET提供了插件技术,可以通过在XML文件中对Job和Trigger的 ...

  10. 【php正则】php正则匹配UTF-8格式的中文汉字 和 【,】【,】【。】等符号

    1.php正则匹配UTF-8格式的中文汉字 和 [,][,][.]等符号 if (preg_match_all("/([\x{4e00}-\x{9fa5}]+((,)?)+((,)?)+(( ...