- 浏览: 229848 次
- 性别:
- 来自: beijing
文章分类
英文数字转换为 中文数字
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]))); } } }
公历转换为中国农历的工具类
import java.util.Calendar; import java.util.Date; public final class LunarCalendar { private static int monCyl, dayCyl, yearCyl; private static int year, month, day; private static boolean isLeap; private static int[] lunarInfo = { 0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6, 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0 }; private static int[] solarMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; private static String[] Gan = { "甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸" }; private static String[] Zhi = { "子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥" }; private static String[] Animals = { "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊", "猴", "鸡", "狗", "猪" }; private static int[] sTermInfo = { 0, 21208, 42467, 63836, 85337, 107014, 128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758 }; private static String[] nStr1 = { "日", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十" }; private static String[] nStr2 = { "初", "十", "廿", "卅", " " }; private static String[] monthNong = { "正", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" }; private static String[] yearName = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; private static String[] festivalName = { "除夕", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; public LunarCalendar() { } // ====================================== 传回农历 y年的总天数 private static int lYearDays(int y) { int i; int sum = 348; // 29*12 for (i = 0x8000; i > 0x8; i >>= 1) { sum += (lunarInfo[y - 1900] & i) == 0 ? 0 : 1; // 大月+1天 } return (sum + leapDays(y)); // +闰月的天数 } // ====================================== 传回农历 y年闰月的天数 private static int leapDays(int y) { if (leapMonth(y) != 0) return ((lunarInfo[y - 1900] & 0x10000) == 0 ? 29 : 30); else return (0); } // ====================================== 传回农历 y年闰哪个月 1-12 , 没闰传回 0 private static int leapMonth(int y) { return (lunarInfo[y - 1900] & 0xf); } // ====================================== 传回农历 y年m月的总天数 private static int monthDays(int y, int m) { return ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0 ? 29 : 30); } // ====================================== 算出农历, 传入日期物件, 传回农历日期物件 // 该物件属性有 .year .month .day .isLeap .yearCyl .dayCyl .monCyl private static void Lunar1(Date objDate) { int i, leap = 0, temp = 0; Calendar cl = Calendar.getInstance(); cl.set(1900, 0, 31); // 1900-01-31是农历1900年正月初一 Date baseDate = cl.getTime(); // 1900-01-31是农历1900年正月初一 int offset = (int) ((objDate.getTime() - baseDate.getTime()) / 86400000); // 天数(86400000=24*60*60*1000) // System.out.println(offset); dayCyl = offset + 40; // 1899-12-21是农历1899年腊月甲子日 monCyl = 14; // 1898-10-01是农历甲子月 // 得到年数 for (i = 1900; i < 2050 && offset > 0; i++) { temp = lYearDays(i); // 农历每年天数 offset -= temp; monCyl += 12; } if (offset < 0) { offset += temp; i--; monCyl -= 12; } year = i; // 农历年份 yearCyl = i - 1864; // 1864年是甲子年 leap = leapMonth(i); // 闰哪个月 isLeap = false; for (i = 1; i < 13 && offset > 0; i++) { // 闰月 if (leap > 0 && i == (leap + 1) && isLeap == false) { --i; isLeap = true; temp = leapDays(year); } else { temp = monthDays(year, i); } // 解除闰月 if (isLeap == true && i == (leap + 1)) isLeap = false; offset -= temp; if (isLeap == false) monCyl++; } if (offset == 0 && leap > 0 && i == leap + 1) if (isLeap) { isLeap = false; } else { isLeap = true; --i; --monCyl; } if (offset < 0) { offset += temp; --i; --monCyl; } month = i; // 农历月份 day = offset + 1; // 农历天份 // System.out.println(day); } private static int getYear() { return (year); } private static int getMonth() { return (month); } private static int getDay() { return (day); } private static int getMonCyl() { return (monCyl); } private static int getYearCyl() { return (yearCyl); } private static int getDayCyl() { return (dayCyl); } private static boolean getIsLeap() { return (isLeap); } // ============================== 传入 offset 传回干支, 0=甲子 private static String cyclical(int num) { return (Gan[num % 10] + Zhi[num % 12]); } // ====================== 中文日期 private static String cDay(int d) { String s; switch (d) { case 10: s = "初十"; break; case 20: s = "二十"; break; case 30: s = "三十"; break; default: s = nStr2[(int) (d / 10)];// 取商 s += nStr1[d % 10];// 取余 } return (s); } private static String cYear(int y) { String s = " "; int d; while (y > 0) { d = y % 10; y = (y - d) / 10; s = yearName[d] + s; } return (s); } public static String getLunar(String year, String month, String day) { Date sDObj; String s; int SY, SM, SD; int sy; SY = Integer.parseInt(year); SM = Integer.parseInt(month); SD = Integer.parseInt(day); sy = (SY - 4) % 12; // log.debug("SY=" + SY + "SM=" + SM + "SD=" + SD + "sy=" + sy); Calendar cl = Calendar.getInstance(); cl.set(SY, SM - 1, SD); sDObj = cl.getTime(); // com.veriweb.util.OurLog.debug("sDObj="+sDObj); // 日期 Lunar1(sDObj); // 农历 s = "农历 " + "【" + Animals[sy] + "】" + cYear(getYear()) + "年" + " "; s += (getIsLeap() ? "闰" : "") + monthNong[getMonth()] + "月" + (monthDays(getYear(), getMonth()) == 29 ? "小" : "大"); s += cDay(getDay()) + " "; s += cyclical(getYearCyl()) + "年" + cyclical(getMonCyl()) + "月" + cyclical(getDayCyl()) + "日"; //System.out.println(monthNong[getMonth()] + "---" + cDay(getDay())); return s; } public static void main(String[] args) { System.out.println(getLunar("2005", "8", "2")); System.out.println(getLunar("2006", "8", "3")); System.out.println(getLunar("2008", "6", "8")); System.out.println(getLunar("2010", "8", "3")); System.out.println(getLunar("2011", "2", "17")); } }
发表评论
-
二进制 授权管理 java
2013-09-09 12:52 906package org.qincy.binary; ... -
com.richfit.bi.quartz 定时执行示例
2013-04-12 15:39 01 内含jetty 配置,下载jetty 依赖包,算了,还是提 ... -
利用工具将shp文件导入到oracle spatial中
2012-05-21 14:20 43901 下载shp2sdo 工具,将工具放在 oracle按照目录 ... -
Arcgis object for java 访问栅格数据,使用GP工具,进行栅格矢量化---栅格矢量化面。
2012-06-20 09:17 4137直接贴代码了,不多解释了。 1、栅格数据的 ... -
svn 删除注册表
2012-02-11 12:02 1552svn 删除注册表 -
arcgis server 服务
2012-01-06 17:58 1182package com.hdmap.fymas; imp ... -
Flex BlazeDS java 项目
2011-12-12 17:21 1096根据网上的例子 ,写的 flex BlazeDS 框架与 ... -
junit 4 spring 自动化测试
2010-12-13 16:08 16391 添加jar ,依赖jar 包围 spring-test, ... -
在tomcat 发布,去掉项目名称
2010-11-17 09:53 19631 找到 server.xml 配置= ... -
掉字段内容包含的空格
2010-09-27 10:17 979使用replace函数去掉字段内容包含的空格,例子如下: up ... -
无聊的jsti 的fn 函数(资料备份)
2010-09-25 17:16 977无聊的jsti 的fn 函数(资料备份) ... -
无聊写Code
2010-09-25 09:38 1004package edu.qdkj.main; impor ... -
Spring Quartz 学习
2010-09-20 09:27 1171Quartz 是一个 定时执行的框架,可以设定规定时执行,或者 ... -
kaptcha 例子
2010-09-13 15:09 3021kaptcha 简单例子 与 产生中文字符 kaptch ... -
myEclipse 下的项目不能编译
2010-09-09 14:21 947查看 是否有的错误的jar 1.项目----prope ... -
关于VLSM 例子
2010-08-31 16:57 1495未经测试,不知道理解是否正确。 VLSM(可变长子网掩码) ... -
jwebmail的配置
2010-08-16 16:59 2493jwebmail的配置说明 ... -
Solaris10下Nagios安装
2010-08-16 08:48 971发 -
java JDK 下载页面
2010-08-13 16:32 1008全部JDK 下载,从 1.1 到 jdk 6 下载 http ... -
无聊写的io跳过第一行
2010-08-05 09:27 1109public void csvOpenWithReader(I ...
相关推荐
java sql操作工具类 java sql操作工具类java sql操作工具类 java sql操作工具类java sql操作工具类 java sql操作工具类java sql操作工具类 java sql操作工具类java sql操作工具类 java sql操作工具类java sql操作...
java 获取地址工具类 java 获取地址工具类java 获取地址工具类 java 获取地址工具类java 获取地址工具类 java 获取地址工具类java 获取地址工具类 java 获取地址工具类java 获取地址工具类 java 获取地址工具类java ...
java 转义和反转义工具类 java 转义和反转义工具类java 转义和反转义工具类 java 转义和反转义工具类java 转义和反转义工具类 java 转义和反转义工具类java 转义和反转义工具类 java 转义和反转义工具类java 转义和...
在C++编程中,工具类是非常重要的一部分,它们提供了一系列通用功能,可以帮助开发者更高效地进行项目开发。本文将深入探讨标题"**C++工具类-常用工具类源码**"所涵盖的知识点,主要围绕文件处理、编码处理、字符串...
`RabbitmqUtil` 是一个专门为Java开发者设计的工具类,简化了与RabbitMQ交互的复杂过程,使得开发者能够更快速、更方便地发送和接收消息。 首先,我们来详细了解一下`RabbitmqUtil`工具类的主要功能: 1. **连接...
Elasticsearch工具类是开发中常见的一种抽象封装,旨在简化与Elasticsearch数据库的交互,提高代码的可读性和可维护性。Elasticsearch是一种基于Lucene的分布式、RESTful搜索和分析引擎,广泛用于实时大数据分析和...
在C#编程中,工具类库是开发人员经常会用到的一种资源,它们提供了一系列预定义的方法和功能,以便简化各种常见的编程任务。标题中的"C#工具类库类库 包含所有的常用工具类"暗示了这是一个集合,包含了多种实用工具...
在Android应用开发中,工具类(Utils)是程序员经常使用的辅助模块,它们包含了一系列静态方法,用于处理各种常见的任务,从而提高代码的复用性和可维护性。本资源"Android快速开发系列 10个常用工具类 程序源码...
android自定义log日志输出工具,该工具类具有以下优点: 1 在LogUtlis方法的第一个参数中填this可以输出当前类的名称,特别是在匿名内部类使用也可以输出当前类名。 如 : LogUtils.i(this,”这是一个实用的日志...
C# Util中的Json工具类通常提供了序列化和反序列化JSON对象的方法,如将C#对象转换为JSON字符串,或者将JSON字符串解析为C#对象,这在处理API请求或保存配置文件时非常有用。 2. **Net**: 这部分可能包含网络通信...
[工具类] 获得汉字拼音首字母的java工具类 .java [工具类] 获取绝对路径 .java [工具类] 记录log日志文件的工具类 .java [工具类] 连接数据库的工具类 .java [工具类] 使用Java程序来实现HTTP文件的队列下载 ....
小程序源码 小工具类(带后台)小程序源码 小工具类(带后台)小程序源码 小工具类(带后台)小程序源码 小工具类(带后台)小程序源码 小工具类(带后台)小程序源码 小工具类(带后台)小程序源码 小工具类(带...
Class类工具 \Cookie工具类 \excel读取 工具类\Java如何生成验证码图片和点击刷新验证码\java获取当前月第一天和最后一天,上个月第一天和最后一天\java实现ftp文件的上传与下载\Json工具类 - JsonUtils.java\JS...
Java字符串中${}或者{}等占位符替换工具类 Java字符串中${}或者{}等占位符替换工具类是一个功能强大且实用的工具类,它可以将Java字符串中的占位符依次替换为指定的值。该工具类的主要功能是实现占位符的替换,即将...
java Base64工具类 java Base64工具类java Base64工具类 java Base64工具类 java Base64工具类 java Base64工具类java Base64工具类 java Base64工具类 java Base64工具类 java Base64工具类java Base64工具类 java ...
[工具类] CookieCounter .java.txt [工具类] 验证码img .jsp.txt [工具类] Java中计算任意两个日期之间的工作天数 .java.txt [工具类] java抓取网页 .java.txt [工具类] MD5 .java.txt [工具类] MD5强化版 .java.txt...
在Android开发中,工具类(Util Classes)是程序员们经常使用的辅助代码集合,它们封装了常见的功能,使得代码更加简洁、可读性更强。这里提到的"android工具类 26个实用工具类"是一个集合,包含了多个针对Android...
该工具类提供了多种方法来发送 GET、POST、PUT、DELETE 等请求,并且支持设置超时时间、代理服务器、证书验证等功能。 关键代码分析 在 HttpUtils 工具类中,有一些关键的代码需要特别注意: 1. `init()` 方法:...
为了解决这个问题,开发了这个Java实体类字段生成工具类。 2、该工具类可以将数据库表列字段转化为对应的Java实体类字段。生成的实体类字段格式清晰易读,且符合Java命名规范。通过使用该工具类,可以大大提高开发...
java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析工具类 java xml解析工具类java xml解析...