求一个阿拉伯数字转中文的算法。本人有个不成熟的思路,请大家指教。

一只熊猫 2008-10-09 09:48:51
我这个问题比转中文货币简单多啦,只要求转5位以内的数,还不用考虑小数点。

本人写了个代码如下:


Public Function chrs(ByVal num As Integer)
If Not IsNumeric(num) Then
Return "参数不是数字。"
End If
Dim cnstr1 As String = "零一二三四五六七八九十"
Dim cnstr2 As String = " 十百千万"
Dim str1 As String = num.ToString.Trim
Dim tempstr As String = ""

For i As Integer = 0 To str1.Length - 1
tempstr = tempstr & cnstr1.Substring(Val(str1.Substring(i, 1)), 1) & cnstr2.Substring(str1.Length - i - 1, 1)
Next
Return tempstr
End Function


转换结果:

12345 - > 一万二千三百四十五 非常好
1234 - > 一千二百三十四 不错啊
123 - > 一百二十三
12 - > 一十二
1 - > 一
10203 - > 一万零二百零三 太棒了

10 - > 一十零 汗了
100 - > 一百零零 再汗
1001 - > 一千零零一 很汗

求高手们提供一个解决0位的算法啊。。。。
...全文
209 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ny-6000 2008-10-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 coolstarhty 的回复:]
学习并支持
[/Quote]


me too
一只熊猫 2008-10-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wuyi8808 的回复:]
http://topic.csdn.net/u/20080125/16/e525de9d-e92f-44b9-8a8c-ea86a08f084b.html

http://topic.csdn.net/u/20080125/09/04c65875-4f50-42cd-bd63-d7b1429e42e1.html

Q_282898034写的一个正则的很强:

C# codestrings=(newRandom().Next()/100.0).ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");stringd=Regex.Replace(s,@"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\…
[/Quote]

确实太牛了。。

记得以前老师教过一个算法,3-4行代码就解决问题,只是具体的记不得了。。。
coolstarhty 2008-10-10
  • 打赏
  • 举报
回复
学习并支持
haifeng39 2008-10-10
  • 打赏
  • 举报
回复
学习
cauhorse 2008-10-09
  • 打赏
  • 举报
回复
汗了~
hackztx 2008-10-09
  • 打赏
  • 举报
回复
static void Main()
{
string str = GetString(57803);
}

public static string GetString(int value)
{
string str = value.ToString();
StringBuilder sb;
if (value < 0)
{
sb = new StringBuilder("负");
}
else if (value == 0)
{
sb = new StringBuilder(Code.零.ToString());
return sb.ToString();
}
else
{
sb = new StringBuilder();
}
int count = str.Length;
for (int length = 0; length < str.Length; length++)
{
sb.Append(GetCode(str[length]));
sb.Append(GetRank(count--));
}
return sb.ToString();
}
public static string GetCode(char c)
{
string str = c.ToString();
int value = int.Parse(str);
string strresults = Convert.ToString((Code)value);
return strresults;
}
public static string GetRank(int value)
{
return Convert.ToString((Rank)value);
}
enum Code
{
零, 一, 二, 三, 四, 五, 六, 七, 八, 九, 十
}
enum Rank
{
个=1,十 , 百, 千, 万, 十万, 百万, 千万, 亿
}
hhhh63 2008-10-09
  • 打赏
  • 举报
回复
很早以前写过一个VBA的,找不到了,我的思路是这样的:
1. 数字尾部的0都不翻译,不管有多少个。
2. 数字中间有连续多个0的话,只翻译一个。
3. 我个人认为从个位开始翻译好一些。
wanghui0380 2008-10-09
  • 打赏
  • 举报
回复
不要按位转,你应该取模去转
一只熊猫 2008-10-09
  • 打赏
  • 举报
回复
上面代码漏了点东西,下面的是正确的!

Public Function chrs(ByVal num As Integer)
If Not IsNumeric(num) Then
Return "参数不是数字。"
End If
Dim cnstr1 As String = "零一二三四五六七八九十"
Dim cnstr2 As String = " 十百千万"
Dim str1 As String = num.ToString.Trim
Dim tempstr As String = ""

For i As Integer = 0 To str1.Length - 1
tempstr = tempstr & cnstr1.Substring(Val(str1.Substring(i, 1)), 1) & IIf(cnstr1.Substring(Val(str1.Substring(i, 1)), 1) = "零", "", cnstr2.Substring(str1.Length - i - 1, 1))
Next
Return tempstr
End Function
wuyi8808 2008-10-09
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080125/16/e525de9d-e92f-44b9-8a8c-ea86a08f084b.html

http://topic.csdn.net/u/20080125/09/04c65875-4f50-42cd-bd63-d7b1429e42e1.html

Q_282898034 写的一个正则的很强:

string s = (new Random().Next()/100.0).ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");
string d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$))))", "${b}${z}");
Console.WriteLine(d + "\n" + Regex.Replace(d, ".", delegate(Match m) { return "负元空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟萬億兆京垓秭穰"[m.Value[0] - '-'].ToString(); }));


翻译成VB.NET就是这样的:

Dim s As String = (New Random().[Next]() / 100).ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A") 
Dim d As String = Regex.Replace(s, "((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$))))", "${b}${z}")
Console.WriteLine(d + vbLf + Regex.Replace(d, ".", Function(m As Match) "负元空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟萬億兆京垓秭穰"(m.Value(0) - "-"C).ToString()))
水如烟 2008-10-09
  • 打赏
  • 举报
回复
以前写过一个(不过现在NET本身已有类提供这些方法了)

货币金额拼写转换类
http://www.cnblogs.com/LzmTW/archive/2006/01/27/323884.html
lovehongyun 2008-10-09
  • 打赏
  • 举报
回复
呵呵.
Bullatus 2008-10-09
  • 打赏
  • 举报
回复
我倒希望有汉字转阿拉伯数字的代码……
辉太郎 2008-10-09
  • 打赏
  • 举报
回复
借鉴一下,之前写过一个阿拉伯数字转英文的程序,虽然成功了,但是写的代码太多了,可以简化一下了。

16,717

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧