using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Data; namespace System.Windows.Controls
{
[ValueConversion(typeof(string), typeof(string))]
public class NumberToChineseConverter : IValueConverter
{ public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string valueString = value.ToString(); decimal num = 0; if (!decimal.TryParse(valueString, out num))
{
return DependencyProperty.UnsetValue;
} string[] tmp_Array = num.ToString().Split(new char[] { '.' }, StringSplitOptions.None); // 这个是小数点前的数字
string beforeDecimalPoint = tmp_Array[0];
// 这个是小数点后的数字
string afterDecimalPoint = tmp_Array.Length > 1 ? tmp_Array[1] : string.Empty; // 先将数字四位为一组分别放到一个List中
List<ChineseNum> beforeDecimalPointGroup = new List<ChineseNum>();
int maxIndex = beforeDecimalPoint.Length - 1;
int count = 0;
string tmpValue = string.Empty; for (var n = maxIndex; n >= 0; n--)
{
tmpValue = string.Format("{0}{1}", beforeDecimalPoint[n].ToString(), tmpValue); if (count == 3 || n == 0)
{
var number = new ChineseNum()
{
UnitIndex = beforeDecimalPointGroup.Count,
Number = tmpValue
}; beforeDecimalPointGroup.Add(number); count = 0;
tmpValue = string.Empty;
}
else
{
count++;
}
} string result = string.Empty;
var tmp = beforeDecimalPointGroup.OrderBy(c => c.UnitIndex); // 将每4位的数字组合起来
foreach (var a in tmp)
{
result = string.Format("{1}{0}", result, a.Value);
} // 整合小数部分
if (!string.IsNullOrEmpty(afterDecimalPoint))
{
// 增加点
result = string.Format("{0}{1}", result, "点"); // 整合每个位置上得小数
for (var n = 0; n < afterDecimalPoint.Length; n++)
{
result = string.Format("{0}{1}", result, GetNumber(int.Parse(afterDecimalPoint[n].ToString())));
}
} return result;
} static string GetNumber(int n)
{
string num = string.Empty; switch (n)
{
case 0: num = "零"; break;
case 1: num = "壹"; break;
case 2: num = "贰"; break;
case 3: num = "叁"; break;
case 4: num = "肆"; break;
case 5: num = "伍"; break;
case 6: num = "陆"; break;
case 7: num = "柒"; break;
case 8: num = "捌"; break;
case 9: num = "玖"; break;
default: break;
} return num;
} public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
} public class ChineseNum
{
public int UnitIndex { get; set; } public string Number { get; set; } public string Value
{
get
{
// 当只有一个0时,返回0,此例仅适用于数字0
if (Number == "0")
{
return PlaceHolder;
} // 当只具备0时,该四位数字不需要显示
if (string.IsNullOrEmpty(Number.Trim(new char[] { '0' })))
{
return string.Empty;
}
else // 当具备其他数字时,组合中文大写数字
{
string value = string.Empty; for (var n = 0; n < Number.Length; n++)
{
value = string.Format("{0}{1}{2}", value, GetNumber(n), GetUnit(n));
} // 组合当前4位数所在的单位
return string.Format("{0}{1}", value, UnitValue(UnitIndex));
}
}
} public string PlaceHolder
{
get
{
return "零";
}
} string GetNumber(int index)
{
var n = int.Parse(Number[index].ToString());
string num = string.Empty; // 当0为最后一位时 或者当下一位也为0时 不显示该位
if (n == 0 && ((Number.Length == index + 1) || Number[index + 1] == '0'))
{
return num;
} switch (n)
{
case 0: num = "零"; break;
case 1: num = "壹"; break;
case 2: num = "贰"; break;
case 3: num = "叁"; break;
case 4: num = "肆"; break;
case 5: num = "伍"; break;
case 6: num = "陆"; break;
case 7: num = "柒"; break;
case 8: num = "捌"; break;
case 9: num = "玖"; break;
default: break;
} return num;
} /// <summary>
/// 获取当前位置上得数字的中文大写单位
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
string GetUnit(int index)
{
string unit = string.Empty; int unitIndex = Number.Length - index; if (Number[index] == '0')
return unit; switch (unitIndex)
{
case 4: unit = "千"; break;
case 3: unit = "百"; break;
case 2: unit = "拾"; break;
} return unit;
} string UnitValue(int index)
{
string unit = string.Empty; switch (index)
{
case 1: unit = "万"; break;
case 2: unit = "亿"; break;
case 3: unit = "兆"; break;
case 4: unit = "京"; break;
case 5: unit = "垓"; break;
case 6: unit = "秭"; break;
default: break;
} return unit;
}
}
}

Number: 12345

Chinese: 壹万贰千叁百肆拾伍

NumberToChineseConverter.cs的更多相关文章

  1. [C#] 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute

    剖析 AssemblyInfo.cs - 了解常用的特性 Attribute [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5944391.html 序 ...

  2. Atitit 软件架构方法的进化与演进cs bs soa roa  msa  attilax总结

    Atitit 软件架构方法的进化与演进cs bs soa roa  msa  attilax总结 1.1. 软件体系架构是沿着单机到 CS 架构,再到 BS 的三层架构甚至多层架构逐步发展过来的,关于 ...

  3. 从java文件和CS文件里查询方法使用次数工具

    前几天,领导让我找一下老系统(Java)里getRemoteUser方法都哪个文件用了,package是什么,方法被调用了多少次,当时因为着急,所以,直接人工找的,但是以后要是再出现,人工找就太讨厌了 ...

  4. 关于 WP 开发中.xaml 与.xaml.cs 的关系

    今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: Windows Forms 先看看Window Forms中的 ...

  5. .net 用户控件ascx.cs注册js脚本代码无效果

    在.net web项目中碰到一个比较奇怪的问题,网上没找到解决方案,先自己mark一下 问题描述: 添加一个用户控件ascx,在后端.cs添加js注册脚本,执行后没有弹出框 注册脚本为: this.P ...

  6. DateHelper.cs日期时间操作辅助类C#

    //==================================================================== //** Copyright © classbao.com ...

  7. 仅用aspx文件实现Ajax调用后台cs程序。(实例)

    仅用aspx文件实现Ajax调用后台cs无刷新程序.(实例) 两个文件:aaa.aspx 和aaa.aspx.cs 一.aaa.aspx <script type="text/java ...

  8. Etw EventSourceProvider_EventsProducer.cs OopConsoleTraceEventListenerMonitor_TraceControllerEventsConsumer.cs

    // EventSourceProvider_EventsProducer.cs /* /r:"D:\Microshaoft.Nuget.Packages\Microsoft.Diagnos ...

  9. WPF根据Oracle数据库的表,生成CS文件小工具

    开发小工具的原因: 1.我们公司的开发是客户端用C#,服务端用Java,前后台在通讯交互的时候,会用到Oracle数据库的字段,因为服务器端有公司总经理开发的一个根据Oracle数据库的表生成的cla ...

随机推荐

  1. ArcGIS AddIN开发异常之--修饰符“static”对该项无效

    修饰符“static”对该项无效, 修饰符“internal”对该项无效. 该异常弹出的位置为Config.Designer.CS文件中相关插件的声明附近 internal static string ...

  2. 矩形的个数-nyoj206

    描述在一个3*2的矩形中,可以找到6个1*1的矩形,4个2*1的矩形3个1*2的矩形,2个2*2的矩形,2个3*1的矩形和1个3*2的矩形,总共18个矩形.给出A,B,计算可以从中找到多少个矩形.   ...

  3. Linux 搭建svn服务器

    一.安装svn服务器端yum install subversion      从镜像下载安装svn服务器端 如果后面执行“svnadmin create /usr/local/svn/sunny”提示 ...

  4. 有效的PhoneGap CSS: WebKit Tap Highlight Color

    原文链接:文章1:http://phonegap-tips.com/articles/essential-phonegap-css-webkit-tap-highlight-color.html(此文 ...

  5. 关于linux密码忘记问题解决方法

    最近在试装centos,不小心把密码丢了,进不去,查了一下资料,找到了方法,试验成功.存在这里,备用. 1. 在出现grub画面时,用上下键选中你平时启动linux的那一项,然后按e键 2. 再次用上 ...

  6. response的Writer输出数据的问题

    package cn.itcast.response; import java.io.IOException; import java.io.OutputStream; import java.io. ...

  7. 【iCore3 双核心板_ uC/OS-III】例程九:任务信号量

    实验指导书及代码包下载: http://pan.baidu.com/s/1c1W29uK iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  8. Java的析构函数System的finalize()

    一个对象是由产生 到使用 到销毁的过程 即C++中 构造函数-> body->析构函数 在Java之中为了回收不需要的空间可以使用System类的finalize() class A{ p ...

  9. ORACLE常见错误代码的分析与解决

    (一)在使用ORACLE的过程过,我们会经常遇到一些ORACLE产生的错误,对于初学者而言,这些错误可能有点模糊,而且可能一时不知怎么去处理产生的这些错误,本人就使用中出现比较频繁的错误代码一一做出分 ...

  10. ssm maven项目启动 报SYSTEM_PROPERTIES_MODE_ENVIRONMENT

    1.jar包冲突,查看项目中的jar和pom.xml中配置的jar包 版本,把没用的jar包删掉