在c#.net中的转换 [英] conversion in c#.net

查看:56
本文介绍了在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(); } } } }



它在代码poroject中

问候
sarva


C# code for converting a decimal number(125.50) into words(one hundred and twentyfive rupees and fifty paise only) format.

解决方案

/* 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆