在c#.net中的转换 [英] conversion in c#.net
问题描述
C#代码,用于将十进制数字(125.50)转换为单词(仅适用于125卢比和五十帕斯卡)的格式. cs> 文件名:NumberToEnglish.cs */
/* ************************ ****************************************************** *********************
*该程序是免费软件;您可以重新分发和/或修改它.没有任何条款和条件!
*分发此程序是希望它会有用,
*但无任何保证;甚至没有默示的保证
*特定目的的适销性或适用性.
*向作者报告错误或评论:Fred Byamugisha(fredbyk@gmail.com)[乌干达坎帕拉]
****************************************************** **************************************************/
使用系统;
命名空间 custom.util
{
公共 类 NumberToEnglish
{
公共 字符串 changeNumericToWords( double numb)
{
字符串 num = numb.ToString();
返回 changeToWords(num, false );
}
公共 字符串 changeCurrencyToWords( String 麻木)
{
返回 changeToWords(numb, true );
}
公共 字符串 changeNumericToWords( String numb)
{
返回 changeToWords(numb, false );
}
公共 字符串 changeCurrencyToWords( double numb)
{
返回 changeToWords(numb.ToString(), true );
}
私有 字符串 changeToWords(字符串麻木,布尔 isCurrency)
{
字符串 val = " ,wholeNo =麻木,点= " 和Str = " ",pointStr = " ;
字符串 endStr =(isCurrency)吗? (" ):(" ");
尝试
{
int decimalPlace = numb.IndexOf(" );
如果(decimalPlace > 0 )
{
wholeNo = numb.Substring( 0 ,decimalPlace);
points = numb.Substring(decimalPlace + 1);
如果(Convert.ToInt32(points)> 0 )
{
andStr =(isCurrency)?(" ):(" ); // 只是将整数与点/分分开
endStr =(isCurrency)吗? (" + endStr):(" ");
pointStr = translationCents(points);
}
}
val = 字符串 .Format(" ,translateWholeNumber(wholeNo..Trim(),andStr,pointStr,endStr);
}
捕获 {;}
返回 val;
}
私有 字符串 translationWholeNumber(字符串数字)
{
字符串 word = " ;
尝试
{
布尔 startsZero = false ; // 测试0XX
布尔 isDone = false ; // 测试是否已翻译
double dblAmt =(Convert.ToDouble(number));
// if((dblAmt> 0)&& number.StartsWith("0"))
如果(dblAmt > 0 )
{// 测试数字中的零或数字零
startsZero = number.StartsWith(" );
int numDigits = number.Length;
int pos = 0 ; // 商店数字分组
字符串 place = " ; // 数字分组名称:千位,千位等...
开关(numDigits)
{
案例 1 :// 一个人的范围
字=个(数字);
isDone = true ;
break ;
案例 2 :// 十进位范围
字=十(数字);
isDone = true ;
break ;
案例 3 :// 数百个范围
pos =(numDigits% 3 )+ 1 ;
place = " ;
break ;
案例 4 :// 数千范围
案例 5 :
案例 6 :
pos =(numDigits% 4 )+ 1 ;
place = " ;
break ;
案例 7 :// 百万范围
案例 8 :
案例 9 :
pos =(numDigits% 7 )+ 1 ;
place = " ;
break ;
案例 10 :// 十亿个范围
pos =(numDigits% 10 )+ 1 ;
place = " ;
break ;
// 为十亿"以上的商品添加额外的大小写选项...
默认:
isDone = true ;
break ;
}
如果(!isDone)
{// 如果未完成翻译,请继续...(递归!!)
字= translationWholeNumber(number.Substring( 0 ,pos))+地点+ translateWholeNumber(number.Substring(pos));
// 检查尾随零
如果(beginsZero)word = " + word.Trim();
}
// 忽略数字分组名称
如果(word.Trim().Equals(place.Trim()))word = " ";
}
}
捕获 {;}
返回 word.Trim();
}
私有 字符串 tens(字符串数字)
{
int digt = Convert.ToInt32(digit);
字符串 name = 空;
开关(摘要)
{
案例 10 :
名称= " ;
break ;
案例 11 :
name = " ;
break ;
案例 12 :
名称= " ;
break ;
案例 13 :
name = " ;
break ;
案例 14 :
名称= " ;
break ;
案例 15 :
name = " ;
break ;
案例 16 :
name = " ;
break ;
案例 17 :
name = " ;
break ;
案例 18 :
name = " ;
break ;
案例 19 :
名称= " ;
break ;
案例 20 :
名称= " ;
break ;
案例 30 :
name = " ;
break ;
案例 40 :
名称= " ;
break ;
案例 50 :
name = " ;
break ;
案例 60 :
name = " ;
break ;
案例 70 :
名称= " ;
break ;
案例 80 :
name = " ;
break ;
案例 90 :
name = " ;
break ;
默认:
如果(提取> 0 )
{
名称= tens(digit.Substring( 0 , 1 )+ " )+ " +个(digit.Substring( 1 ));
}
break ;
}
返回名称;
}
私有 字符串个(字符串数字)
{
int digt = Convert.ToInt32(digit);
字符串 name = " ;
开关(摘要)
{
案例 1 :
name = " ;
break ;
案例 2 :
name = " ;
break ;
案例 3 :
名称= " ;
break ;
案例 4 :
名称= " ;
break ;
案例 5 :
名称= " ;
break ;
案例 6 :
名称= " ;
break ;
案例 7 :
名称= " ;
break ;
案例 8 :
name = " ;
break ;
案例 9 :
名称= " ;
break ;
}
返回名称;
}
私有 字符串 translationCents(字符串分)
{
字符串 cts = " ,数字= " ,engOne = " ";
for ( int i = 0 ; i < cents.Length; i ++)
{
digit = cents [i] .ToString();
如果(数字.等于(" ))
{
engOne = " ;
}
其他
{
engOne =个(数字);
}
cts + = " + engOne;
}
返回 cts;
}
}
}
主程序:
使用系统;
使用 System.Text;
命名空间 custom.util
{
class 程序
{
静态 无效 Main(字符串 []参数)
{
NumberToEnglish num = 新 NumberToEnglish();
同时(真)
{
字符串 input = Console.ReadLine();
如果(输入== 空 ||输入.长度== 0 ) break ;
Console.WriteLine(num.changeNumericToWords(input));
Console.WriteLine();
}
}
}
} C# code for converting a decimal number(125.50) into words(one hundred and twentyfive rupees and fifty paise only) format.
它在代码poroject中
问候
sarva
/* File name : NumberToEnglish.cs */
/************************************************************************************************
* This program is free software; you can redistribute it and/or modify.No terms and conditions!
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* Report bugs or comments to the author:Fred Byamugisha (fredbyk@gmail.com)[Kampala,Uganda]
***********************************************************************************************/
using System;
namespace custom.util
{
public class NumberToEnglish
{
public String changeNumericToWords(double numb)
{
String num = numb.ToString();
return changeToWords(num, false);
}
public String changeCurrencyToWords(String numb)
{
return changeToWords(numb, true);
}
public String changeNumericToWords(String numb)
{
return changeToWords(numb, false);
}
public String changeCurrencyToWords(double numb)
{
return changeToWords(numb.ToString(), true);
}
private String changeToWords(String numb, bool isCurrency)
{
String val = "", wholeNo = numb, points = "", andStr = "", pointStr="";
String endStr = (isCurrency) ? ("Only") : ("");
try
{
int decimalPlace = numb.IndexOf(".");
if (decimalPlace > 0)
{
wholeNo = numb.Substring(0, decimalPlace);
points = numb.Substring(decimalPlace+1);
if (Convert.ToInt32(points) > 0)
{
andStr = (isCurrency)?("and"):("point");// just to separate whole numbers from points/cents
endStr = (isCurrency) ? ("Cents "+endStr) : ("");
pointStr = translateCents(points);
}
}
val = String.Format("{0} {1}{2} {3}",translateWholeNumber(wholeNo).Trim(),andStr,pointStr,endStr);
}
catch { ;}
return val;
}
private String translateWholeNumber(String number)
{
string word = "";
try
{
bool beginsZero = false;//tests for 0XX
bool isDone = false;//test if already translated
double dblAmt = (Convert.ToDouble(number));
//if ((dblAmt > 0) && number.StartsWith("0"))
if (dblAmt > 0)
{//test for zero or digit zero in a nuemric
beginsZero = number.StartsWith("0");
int numDigits = number.Length;
int pos = 0;//store digit grouping
String place = "";//digit grouping name:hundres,thousand,etc...
switch (numDigits)
{
case 1://ones' range
word = ones(number);
isDone = true;
break;
case 2://tens' range
word = tens(number);
isDone = true;
break;
case 3://hundreds' range
pos = (numDigits % 3) + 1;
place = " Hundred ";
break;
case 4://thousands' range
case 5:
case 6:
pos = (numDigits % 4) + 1;
place = " Thousand ";
break;
case 7://millions' range
case 8:
case 9:
pos = (numDigits % 7) + 1;
place = " Million ";
break;
case 10://Billions's range
pos = (numDigits % 10) + 1;
place = " Billion ";
break;
//add extra case options for anything above Billion...
default:
isDone = true;
break;
}
if (!isDone)
{//if transalation is not done, continue...(Recursion comes in now!!)
word = translateWholeNumber(number.Substring(0, pos)) + place + translateWholeNumber(number.Substring(pos));
//check for trailing zeros
if (beginsZero) word = " and " + word.Trim();
}
//ignore digit grouping names
if (word.Trim().Equals(place.Trim())) word = "";
}
}
catch { ;}
return word.Trim();
}
private String tens(String digit)
{
int digt = Convert.ToInt32(digit);
String name = null;
switch (digt)
{
case 10:
name = "Ten";
break;
case 11:
name = "Eleven";
break;
case 12:
name = "Twelve";
break;
case 13:
name = "Thirteen";
break;
case 14:
name = "Fourteen";
break;
case 15:
name = "Fifteen";
break;
case 16:
name = "Sixteen";
break;
case 17:
name = "Seventeen";
break;
case 18:
name = "Eighteen";
break;
case 19:
name = "Nineteen";
break;
case 20:
name = "Twenty";
break;
case 30:
name = "Thirty";
break;
case 40:
name = "Fourty";
break;
case 50:
name = "Fifty";
break;
case 60:
name = "Sixty";
break;
case 70:
name = "Seventy";
break;
case 80:
name = "Eighty";
break;
case 90:
name = "Ninety";
break;
default:
if (digt > 0)
{
name = tens(digit.Substring(0, 1) + "0") + " " + ones(digit.Substring(1));
}
break;
}
return name;
}
private String ones(String digit)
{
int digt = Convert.ToInt32(digit);
String name = "";
switch (digt)
{
case 1:
name = "One";
break;
case 2:
name = "Two";
break;
case 3:
name = "Three";
break;
case 4:
name = "Four";
break;
case 5:
name = "Five";
break;
case 6:
name = "Six";
break;
case 7:
name = "Seven";
break;
case 8:
name = "Eight";
break;
case 9:
name = "Nine";
break;
}
return name;
}
private String translateCents(String cents)
{
String cts = "", digit = "", engOne = "";
for (int i = 0; i < cents.Length; i++)
{
digit = cents[i].ToString();
if (digit.Equals("0"))
{
engOne = "Zero";
}
else
{
engOne = ones(digit);
}
cts += " " + engOne;
}
return cts;
}
}
}
Main Program:
using System;
using System.Text;
namespace custom.util
{
class Program
{
static void Main(string[] args)
{
NumberToEnglish num = new NumberToEnglish();
while (true)
{
String input = Console.ReadLine();
if (input == null || input.Length == 0) break;
Console.WriteLine(num.changeNumericToWords(input));
Console.WriteLine();
}
}
}
}
its in code poroject
regards
sarva
这篇关于在c#.net中的转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!