大写金额字符串生成 C#实现
思路:
中文对金额的描述以四位为一组,
只考虑一万亿以内的数字则每组内以千、百、十和[亿\万\元]区分各位
连续的零按一个处理,组内最低位的零可略去
无角无分说整,有角无分只说角,无角有分说零X分,有角有分...
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace MorrisSpace
{
/// <summary>
/// 中文金额字符串辅助类。Helper for Amount string in Chinese
/// </summary>
public class AmountStringHelper
{
static private readonly char[] units = { '分', '角', '拾', '佰', '仟', '圆', '万', '亿', '整' };
// 0 1 2 3 4 5 6 7 8
static private readonly char[] numbers = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' }; /// <summary>
/// 数字金额转大写金额
/// </summary>
/// <param name="num">金额数字</param>
/// <returns>大写金额字符串</returns>
public static string GetAmountInWords(double num)
{
double amount = Math.Round(num, );
long integ = (int)amount;
double fract = Math.Round(amount - integ, );
if (integ.ToString().Length > )
{
return null;
}
string result = "";
if (fract - 0.0 != )
{
string tempstr = fract.ToString();
if (tempstr.Length == )
{
result += numbers[(int)(fract * )];
result += units[];
}
else
{
int frist = (int)(fract * );
int second = (int)(fract * - frist * );
if (frist != )
{
result += numbers[frist];
result += units[];
result += numbers[second];
result += units[];
}
else
{
result += numbers[];
result += numbers[second];
result += units[];
}
}
}
else
{
result += units[];
} for (int temp = (int)(integ % ), secnum = ; temp != ; temp = (int)(integ % ), secnum++)
{
result = FourBitTrans(temp) + units[secnum + ] + result;
integ /= ;
if (integ != && temp < )
{
result = numbers[] + result;
}
}
return result;
} /// <summary>
/// 进行四位数字转换的辅助函数
/// </summary>
/// <param name="num">四位以下数字</param>
/// <returns>大写金额四位节</returns>
public static string FourBitTrans(int num)
{
string tempstr = num.ToString();
if (tempstr.Length > )
{
return null;
}
string result = string.Empty;
int i = tempstr.Length;
int j = ;
bool zeromark = true;
while (--i >= )
{
j++; if (tempstr[i] == '')
{
if (zeromark == true)
{
continue;
}
zeromark = true;
result = numbers[] + result;
continue;
}
zeromark = false;
if (j > )
{
result = units[j] + result;
}
int temp = tempstr[i] - '';
result = numbers[temp] + result;
}
return result;
} }
}
--------------------------------------
这个代码只适合一亿以内的金额,但相信以满足绝大多数情况
大写金额字符串生成 C#实现的更多相关文章
- Excel 数值转换为人民币大写金额字符串
把$B$27单元格中的数值转换为人民币大写金额字符串: 目标单元格填入以下公式: =IF($B$27=0,CONCATENATE(IF($B$27<=0,,TEXT(INT($B$27),&qu ...
- php 依据字符串生成相应数组方法
php 依据字符串生成相应数组方法 比如: <?php $config = array( 'project|page|index' => 'content', 'project|page| ...
- 使用wcf编写坐标字符串生成shapefile文件,在iis发布供前端调用
项目有一需求,需要由坐标字符串(格式:x,y,点名)生成shapefile,由于在前台开发类似功能比较麻烦而且也不适用,最终决定使用WCF来实现,不借助现有GIS软件,基于GDAL实现. 实现过程如下 ...
- QT json字符串生成和解析
1 QT json字符串生成和解析 1.1 QT Json解析流程 (1) 字符串转化为QJsonDocument QJsonParseError json_error; QJso ...
- Python之将Python字符串生成PDF
笔者在今天的工作中,遇到了一个需求,那就是如何将Python字符串生成PDF.比如,需要把Python字符串'这是测试文件'生成为PDF, 该PDF中含有文字'这是测试文件'. 经过一番检索, ...
- Javascript 解析字符串生成 XML DOM 对象。
Javascript 接收字符串生成 XML DOM 对象.实测对 Firefox .IE6 有效.可用于解析 ajax 的服务器响应结果,也可用于解析自定义字符串.1. [代码]函数 ppt模 ...
- c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具
c#实例化继承类,必须对被继承类的程序集做引用 0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...
- java 与日期转换相关的方法(java.util.date类型和java.sql.date类型互相转换)、随机字符串生成方法、UUID生产随机字符串
package com.oop.util; import java.text.*; import java.util.UUID; import org.junit.Test; /* * 与日期相关的工 ...
- java读取字符串,生成txt文件
/** * 读取字符串,生成txt 文件 已解决未设置编码时,在项目中直接打开文件,中文乱码问题 * WriteText.writeToText(musicInfo,fileName)直接调用 * * ...
随机推荐
- 基于HTML5技术的电力3D监控应用(四)
回答了知乎问题较长,一些使用WebGL的经验,作为新的一篇: 正好逛到这个问题,正好是2013年底,正好最近基于的HT for Web 3D做的电力项目收尾,正好用到的就是WebGL技术,因此说说自己 ...
- JS 生成26个大小写字母
主要用到 str.charCodeAt()和 String.fromCharCode()方法 -->使用 charCodeAt() 来获得字符串中某个具体字符的 Unicode 编码. --&g ...
- JS中 toString() & valueOf()
数据的转换 所有对象继承了两个转换方法: 第一个是toString(),它的作用是返回一个反映这个对象的字符串 第二个是valueOf(),它的作用是返回它相应的原始值 toString() toSt ...
- sencha combobox下拉框不用jsonstore,直接使用字符串数组做数据源
combobox下拉框的store除了可以选择一个jsonstore来加载数据,还可以直接使用符串Array做数据源. { xtype: 'combobox', fieldLabel: 'Label' ...
- MySQL架构
一.MySQL逻辑架构 第一层,即最上一层,所包含的服务并不是MySQL所独有的技术.它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安全性等等. ...
- 【Java Saves!】Session 5:计算机器之三--二指禅
人有十指.人类掰着手指头,发明出了0.1.2-9这十个数字.后来手指头不够用了,便发明出数位(个.十.百.千-)和满十进一的规则,称为十进制. 而计算机靠两个手指头工作.在计算机内部,只有0和1两个数 ...
- FL2440驱动添加(3)LCD驱动添加学习笔记
FL2440 LCD内置控制器,320*240 TFT型LCD. 自我理解总结的两种添加驱动模式: 非platform方式添加驱动: 加载驱动: 1,硬件初始化,申请内存,并作地址映射 2,分配设备号 ...
- 【Effective Java】2、构造参数过多的时候
package cn.xf.cp.ch02.item2; /** * * 功能:当我们的构造参数有很多,超出可控范围的时候,用build模式 时间:下午8:25:05 文件:NutritionFact ...
- PHP遍历目录四种方法
学习SPL的时候,遇到了DirectoryIterator这个目录类,谢了一下遍历目录的方法.于是总结一下遍历目录的四种写法 如下: <?php /* * 方法一:利用SPL的目录类,这个很简单 ...
- Android Studio使用教程(一)(转)
今年的Google全球开发者大会虽然没有新的Android系统和设备,但是还是推出了一些不错的产品,Android Studio就是其中之一.这个基于Intellij IDEA开发的Android I ...