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. 词法分析器Antlr

    一.我们都知道编程语言在执行之前需要先进行编译,这样就可以把代码转换成机器识别的语言,这个过程就是编译. 那么它是怎么编译的呢? Java在JVM虚拟机中进行编译,javascript在Js引擎中编译 ...

  2. Matlab里面的SVM

    支持向量机是建立在统计学习理论基础之上的新一代机器学习算法,支持向量机的优势主要体现在解决线性不可分问题,它通过引入核函数,巧妙地解决了在高维空间中的内积运算,从而很好地解决了非线性分类问题. 构造出 ...

  3. Linux下动态库(.so)和静态库(.a) 的区别

    静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.编译之后程序文件大,但加载快,隔离性也好.动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还 ...

  4. 【iCore3 双核心板_FPGA】实验二十:基于FIFO的ARM+FPGA数据存取实验

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

  5. 响应式网站通用css

    /* core.css v1.1 | MIT License | corecss.io */ html { font-family: sans-serif; font-size: 100%; line ...

  6. lua 可变参数

    问题:对可变参数传递的时候,采用如下方案: local cellData = {MsgText = msgText,Param = ...,CallBackFunc = callBackFunc,Ca ...

  7. SinalR+WebSocket

    1.参考资料: http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server http://signalr.ne ...

  8. 【Swing】理解Swing中的事件与线程

    talk is cheap , show me the code. Swing中的事件 事件驱动 所有的GUI程序都是事件驱动的.Swing当然也是. GUI程序不同于Command Line程序,一 ...

  9. 录制简单的自动化测试工具SlikMobile初体验

    今天朋友推荐了款自动化测试工具SlikMobile,下载了个试用了下,感觉还是很容易入门和上手的,感觉和testin的工具差不多,跨平台,多语言支持,支持图片.文本和Native Class三种对象方 ...

  10. 大商创 sql追踪 卖家入驻

    ' ' ' ', '', '', '') ' Query ' Query ' Query ' Query ' Query ' Query ' Query ' Query ' Query ' Query ...