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. 把应用程序exe 注册成为windows 服务的方法

    由于在Windows 服务器上必须要启动一个软件,提供外网访问内网的客户端软件,但是由于每次远程服务器之后会注销当前用户,所以客户端软件就会自动退出,那么我在外网的系统就不能支持访问了. 解决方案:将 ...

  2. DBA日常工作内容和职责

    1.统计数据库总容量 按表空间分别统计: 总容量(单位为M): 2.计算用户下所有对象大小 3计算USERS表空间的大小 4计算该USERS表空间对象大小 ---------------------- ...

  3. 20145337《JAVA程序设计》第七周学习总结

    20145337 <Java程序设计>第七周学习总结 教材学习内容总结 时间的度量 格林威治时间GMT,世界时UT,国际原子时TAI,世界协调时间UTC 就目前来说,即使标注为GMT,实际 ...

  4. [silverlight—wcf]参数:调试资源字符串不可用,秘钥和参数通常提供足够的信息用以诊断问题。

    这段时间在做一个项目,有一项需求是上传,经过思考之后,决定采取Silverlight+WCF的方式做上传操作.就在项目做完了之后,本地测试也都没问题,发布到服务器上的时候,顿时就出现故障了.在选择文件 ...

  5. win commands

    wmic process where name="explorer.exe" delete 我想你问得应该是运行命令吧!我查了,没有,你自己参考一下:Windows常用命令集 wi ...

  6. wpf 将Style应用到 ListView 中的 ListViewItem 元素

    例: 为每个条目元素设置右键菜单 1. 新建右键菜单元素和样式元素 注意: 同时设置样式元素的 TargetType 属性和 x:Key 属性, 将样式元素限定为应用于 ListViewItem 类型 ...

  7. 3D touch的 使用心得

    一.设置图标touch 快捷进入 1.静态标签 静态标签是我们在项目的配置plist文件中配置的标签,在用户安装程序后就可以使用,并且排序会在动态标签的前面. 我们先来看静态标签的配置: 首先,在in ...

  8. c语言-交换两个整数

    使用c来写一个函数来实现交换两个整数. 第一种 一般的方法,引用中间变量,方便快捷. void swap(int *a, int *b) { int tmp = *a; *a = *b; *b = t ...

  9. Nginx下Magento伪静态规则,适用于LNMP一键包

    文件名为:magento.conf(下载),将其放在 /usr/local/nginx/conf/ 文件夹下 然后在 /usr/local/nginx/conf/vhost/www.yourname. ...

  10. 如何查看JDK以及JAVA框架的源码

    如何查看JDK以及JAVA框架的源码 设置步骤如下: 1.点 “window”-> "Preferences" -> "Java" -> &q ...