本节讲解在实际开发中常用的一个方法:将一个浮点数转换成人民币读法字符串,这个程序就需要使用数组。

实现这个方法的思路是,首先把这个浮点数分成整数部分和小数部分。提取整数部分很容易,直接将这个浮点数强制类型转换成一个整数即可,这个整数就是浮点数的整数部分。再使用浮点数减去整数将可以得到这个浮点数的小数部分。

然后分开处理整数部分和小数部分,其中小数部分的处理比较简单,直接截断到保留 2 位数字,转换成几角几分的字符串。整数部分的处理则稍微复杂一点,但只要认真分析不难发现,中国的数字习惯是 4 位一节的,一个 4 位的数字可被转成几千几百几十几,至于后面添加什么单位则不确定:
如果这节 4 位数字出现在 1~4 位,则后面添加单位元。
如果这节 4 位数字出现在 5~8 位,则后面添加单位万。
如果这节 4 位数字出现在 9~12 位,则后面添加单位亿。
多于 12 位就暂不考虑了。

因此实现这个程序的关键就是把一个 4 位整数的浮点数转换成一个中文读法。下面程序把这个需求实现了一部分。

import java.util.Arrays;
import java.util.Scanner;
public class NumRmb {private String[] hanArr = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };private String[] unitArr = { "十", "百", "千" };private String[] unitArr2 = { "分", "角" };/*** 把一个浮点数分解成整数部分和小数部分字符串** @param num 需要被分解的浮点数* @return 分解出来的整数部分和小数部分。第一个数组元素是整数部分,笫二个数组元素是小数部分*/private String[] divide(double num) {// 将一个浮点数强制类型转换为long型,即得到它的整数部分long zheng = (long) num;// 浮点数减去整数部分,得到小数部分,小数部分乘以100后再取整得到2位小数long xiao = Math.round((num - zheng) * 100);// 下面用了2种方法把整数转换为字符串return new String[] { zheng + "", String.valueOf(xiao) };}/*** 将数字转成人民币读法** @param str[] 被分解成整数部分和小数部分的字符串数组* @return 人民币读法的汉字字符串*/private String toHanStr(String str[]) {int zhengLen = str[0].trim().split("").length; // 整数的长度int xiaoLen = str[1].split("").length; // 小数的长度String result = "";// 依次遍历整数的每一位数字for (int i = 0; i < zhengLen; i++) {// 把char型数字转换成int型数字,3 种方法如下:// 方法1:因为它们的ASCII码值恰好相差48,因此把char型数字减去48得到int型数字,例如‘4’被转换成4// int num = str[0].charAt(i) - 48;// 方法2:先将char型数字转换为String字符串,再用Integer(int的包装类,提供了String转换为int的方法,后面教程中我们会详细讲解)转换为int型数字// int num = Integer.parseInt(String.valueOf(str[0].charAt(i)));// 方法3:char型数字减去字符0来转换为int型数字int num = str[0].charAt(i) - '0';// 如果不是最后一位数字,而且数字不是零,则需要添加单位(千、百、十)if (i != zhengLen - 1 && num != 0) {result += hanArr[num] + unitArr[zhengLen - 2 - i];} else {// 否则添加“元”result += hanArr[num] + "元";}}// 依次遍历小数的每一位数字for (int i = 0; i < xiaoLen; i++) {int num = str[1].charAt(i) - '0';// 如果数字不是零,则需要添加单位(角,分)if (num != 0) {result += hanArr[num] + unitArr2[xiaoLen - 1 - i];}}return result;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);NumRmb nr = new NumRmb();System.out.println("请输入一个浮点数:");String num = sc.next();String[] strs = nr.divide(Double.parseDouble(num));System.out.println("分解成整数部分和小数部分结果为:" + Arrays.toString(strs));System.out.println("人民币读法为:" + nr.toHanStr(strs));}
}

运行结果:

请输入一个浮点数:
12.3
分解成整数部分和小数部分结果为:[12, 30]
人民币读法为:壹十贰元叁角

1.20 实例:数字转人民币读法相关推荐

  1. Python数字转人民币读法

    # 数字转人民币读法 (考虑到数据连续为零及小数的处理,但可能还需优化)# 定义中文列表 chinese_list = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', ...

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

    </pre><pre name="code" class="java">package com.sungeo; /*** 人民币的读法是 ...

  3. 数字转人民币(大写汉字)读法(Python经典编程案例)

    数字转人民币读法 import warnings from decimal import Decimaldef cncurrency(value, capital=True, prefix=False ...

  4. 人民币读法的java程序_Java浮点数转人民币读法

    packagetheTest;public classNumToRmb {private String[] hanArr={"零","壹","贰&qu ...

  5. JAVA浮点数转人民币读法_算法--java实现将数字转换成人民币大写(迅雷面试题)...

    public classRmb {/*** 人民币的基本信息和操作 * *@authorsoyoungboy *@version1.0*/ private double number; //人民币的数 ...

  6. 人民币读法的java程序_java人民币读法转换

    java人民币读法转换 实现浮点数转换成人民币读法字符串 编写一个程序,将浮点数转换成人民币读法字符串, 例如:    将1006.333转换为壹千零陆元叁角叁分. 题意分析: 将浮点数分成整数部分和 ...

  7. java人民币读法转换

    实现浮点数转换成人民币读法字符串 将浮点数转换成人民币读法字符串, 例如: 将1006.333转换为壹千零陆元叁角叁分. 整体解析: 将浮点数分成整数部分和小数部分,分开处理整数部分和小数部分. 小数 ...

  8. C#通用类库--数字转为人民币汉字大写表示

    //类名:EcanRMB //作用:数字转换为人民币大写 //作者:刘典武 //时间:2010-12-04 using System; using System.Collections.Generic ...

  9. JAVA浮点数浮点数转换成人民币读法

    侵删! 在<疯狂JAVA讲义>第4章最后练习题中,第5题:编写一个程序,将浮点数转换成人民币读法字符串,例如,将1006.33转换成一千零六元三角三分. 这个题主要是一个逻辑判断的过程.首 ...

最新文章

  1. windows10中git 的下载安装
  2. 分享一个牛逼的阿里天猫面经,已经拿到 Offer ,来自朋友的朋友
  3. 关于VS AddIn的注册
  4. EJS学习(三)之语法规则中
  5. 激光SLAM学习--多种类激光雷达介绍(单线、多线)
  6. 关于 ABAP 调试器里的 16 进制值的显示问题
  7. 【APICloud系列|31】百度导航功能的实现
  8. 硬解析和软解析 mysql_Oracle学习之shared pool--硬解析和软解析
  9. iframe框架页面实现自适应高度解决方案
  10. 把socket相关函数封装成类
  11. oracle 批量生成约束,关于sql脚本导入Oracle时重复生成check约束的问题解决
  12. 【转】阿里巴巴性能测试规划思路
  13. linux svnadmin,linux安装centos7.5基于SVN+Apache+svnadmin实现SVN的web管理
  14. SQL练习题,50道
  15. 《月满西楼》——李清照
  16. matlab a律非均匀量化,均匀量化和A律PCM非均匀量化实验.doc
  17. mhw跳过结尾_怪物猎人世界怎么跳过剧情
  18. SpringBoot启动报错:Failed to introspect Class [XXX] from ClassLoader解决办法
  19. 正版游戏怎么开服务器,方舟生存进化
  20. gp-greenplum-vacuum-资源回收-AO表空间回收

热门文章

  1. Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习、深度学习、大数据、云计算等)推荐系统(包括语音生成、识别等前沿黑科技)
  2. GridSearchCV.grid_scores_和mean_validation_score报错
  3. imx6背光驱动调试
  4. 【Eclipse】eclipse che 协作开发
  5. docker 在esx上的网络配置
  6. FCKeditor 2.6.4.1 初始化值不能显示中文问题
  7. SQL 去除重复记录 只保留重复记录中的一条
  8. nrf52832 DFU详细步骤 SDK13
  9. scrapy 安装_安装scrapy时出错
  10. 智能合约重构社会契约(7)以太坊总结