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. javascrpt 中的Ajax请求

    回顾下javascript中的Ajax请求,写一个小例子: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...

  2. 无法分配超出32(XXX)的MINEXTENTS报错的解决方法

    今天在创建新表的时候,遇到该报错:ORA-01659 无法分配超出32(XXX)的MINEXTENTS 解决方法:修改表空间大小. 命令如下: ALTER DATABASE DATAFILE ''D: ...

  3. Hibernate saveOrUpdate方法到底是怎么执行的?

    saveOrUpdate方法,如果传入的对象有主键就执行更新,没有就执行新增.这句话误导了很多人. 究竟是执行新增还是更新,是要有上下文环境的.这个环境就是主键策略的选择. 主键生成方式为 手动设置: ...

  4. 大数相乘nyoj28

    描述我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?   输入 输入一个整数m(0<m<=5000) 输出 输出m的阶乘,并在输出结束之后输入一个换行符 ...

  5. BizTalk开发系列(十三) Schema设计之值约束

    XML Schema 的作用是定义 XML 文档的合法构建模块.在开发过程中有时需要对XML文档做精确的约束.以保证XMl数据的准确性. 今天我们以一个班级Sample来讲探讨一下如何在开发BizTa ...

  6. php中htmlspecialchars和htmlentiti

    Certain characters have special significance in HTML, and should be represented by HTML entities if ...

  7. SeasLog-An effective,fast,stable log extension for PHP

    github: https://github.com/Neeke/SeasLog @author Chitao.Gao [neeke@php.net] @交流群 312910117 简介 为什么使用S ...

  8. MYSQL中创建存储过程实现向表中循环插入数据

    首先在test数据库中先创建一个表test: CREATE TABLE test( ID INT PRIMARY KEY AUTO_INCREMENT ,test_name VARCHAR(20),t ...

  9. SQL Server 定时自动备份数据库

    在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库,这篇文章介绍使用SQL Server 数据库代理中的作业定时自动备份数据库. 1.启动SQL Server代理服务,如下图: 绿色 ...

  10. [转]使用Gradle发布Android开源项目到JCenter

      转自:http://blog.csdn.net/maosidiaoxian/article/details/43148643 使用Gradle发布Android开源项目到JCenter 分类: G ...