大写金额字符串生成 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)直接调用 * * ...
随机推荐
- Mysql学习笔记(十)存储过程与函数 + 知识点补充(having与where的区别)
学习内容:存储程序与函数...这一章学的我是云里雾里的... 1.存储过程... Mysql存储过程是从mysql 5.0开始增加的一个新功能.存储过程的优点其实有很多,不过我觉得存储过程最重要的 ...
- Javascript之旅(一)
Javascript之旅(一) 一.基础知识 基本语法 变量 数据类型 字符串 数组 对象 条件判断 循环 Map和Set iterable 为什么要学习JavaScript JavaScript 是 ...
- 写出优美代码的两个方式:一步到位VS迭代优化
最近把手头这个安卓APP的所有事务性方法都写完了,有了以下体会,新手体会,老鸟轻拍 想写成优美代码的人一般都会有这样的想法: 一定要在写每一句代码,写每一个方法,构造每一个类的时候,都要记得优化: ...
- 点餐APP 冲刺二总结
冲刺二我们小组主要是实现数据库的增删改查等功能, 因为小组成员对数据库都不是很熟悉,所以花了比较多 的时间去学习,功能实现起来也是很艰难,所以第二个 冲刺结束后我们的数据库还是有点问题,不能成功 ...
- Sql Server来龙去脉系列之四 数据库和文件
在讨论数据库之前我们先要明白一个问题:什么是数据库? 数据库是若干对象的集合,这些对象用来控制和维护数据.一个经典的数据库实例仅仅包含少量的数据库,但用户一般也不会在一个实例上创建太多 ...
- [C/C++][文件操作] 对比目录并列出同名较新文件、较旧文件 0.1
主要是模仿robocopy的部分功能 (robocopy /L 参数可以列出本地目录和备份目录中的异同之处,主要是标记出:较新的.较旧的.多出的文件 ) 现在还不会写GUI,打算后面自己做目录树dif ...
- 译:什么是ViewData的, ViewBag和TempData? - MVC为当前和后续请求之间传递数据的三种方法
译文出处:http://www.codeproject.com/Articles/476967/WhatplusisplusViewData-cplusViewBagplusandplusTem AS ...
- ACCESS的参数化查询
看论坛上还许多人问及ACCESS被注入的安全问题许多人解决的方法仍然是用Replace替换特殊字符,然而这样做也并没有起到太大做用今天我就把我用ACCESS参数化查询的一些方法和经验和大家分享希望对大 ...
- mongodb学习4---索引
1,mongodb的性能分析 db.active.find({id:'sdfasdf6jh67j353g346hkfgh6'}).explain('executionStats') "mil ...
- Verilog学习笔记基本语法篇(十)········ 常用系统函数
$display 和 $write 任务 格式: $display (p1,p2,...,pn); $write (p1,p2,..,pn); 这两个函数和系统的任务作用是用来输出信息,即将参数p2到 ...