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. js的关联数组

    我自己感觉js是不支持关联数组的,只有索引数组.想要实现js关联数组的效果,就使用js的对象,使用键值对.如果对数组动态处理用push函数,取值用pop函数.此外,对数组操作有几个比较好的函数,joi ...

  2. 支付宝APP支付之Java后台生成签名具体步骤

    /** *支付宝支付 * @param orderId 订单编号 * @param actualPay 实际支付金额 * @return */ private String getOrderInfoB ...

  3. springmvc+mybatis用多选框批量删除的功能Java代码

    今天写了一个批量删除的功能,在后台传值过程中一直出错,最终还是请教了北京的一位高手帮我解决的,在此首先要好好感谢他,以后我有幸能帮助别人的话,决不推辞. 废话不说,直接进入正题,我会将在编写过程中出现 ...

  4. 解决谷歌浏览器和360浏览器 input 自动填充淡黄色背景色的问题

     input:-webkit-autofill {-webkit-box-shadow: 0 0 0px 1000px white inset;}

  5. 一整套WordPress模板制作的教程

    WordPress基本模板文件 一套完整的WordPress模板应至少具有如下文件:style.css: CSS(样式表)文件index.php : 主页模板archive.php : Archive ...

  6. 使用eclipse开发servlet

    package cn.itcast; import java.io.IOException; import javax.servlet.GenericServlet; import javax.ser ...

  7. XPath提取xml文档数据

    package itcast.dom4j; import java.io.File; import org.dom4j.Document; import org.dom4j.DocumentExcep ...

  8. 定时调度模块:sched

    """A generally useful event scheduler class. 事件调度器类 Each instance of this class manag ...

  9. only for equality comparisons Hash Index Characteristics

    http://dev.mysql.com/doc/refman/5.7/en/index-btree-hash.html Hash Index Characteristics Hash indexes ...

  10. Task示例,多线程

    class Program { static void Main(string[] args) { Run(); } public static async void Run() { var task ...