参数名: length
public string MoneyConvert(string money)
{
string n5 = string.Empty;
string changestr = string.Empty;
string bigstr = string.Empty;
string smallstr = string.Empty;
int len = 0;
if (money.IndexOf(".") > 0)
{
n5 = money.Substring(0, money.IndexOf("."));
}
else
{
n5 = money;
}
len = n5.Length;
changestr = "";
bigstr = "";
smallstr = "";
while (len > 3)
{
bigstr = n5.Substring(0, len - 3);
smallstr = n5.Substring(len - 3, len);
if (changestr != "")
{
changestr = smallstr + "," + changestr;
}
else
{
changestr = smallstr;
}
len -= 3;
}
if (money.IndexOf(".") > 0)
{
if (changestr != "")
{
changestr = n5.Substring(0, len) + "," + changestr + money.Substring(money.IndexOf("."), money.Length);
}
else
{
changestr = n5.Substring(0, len) + money.Substring(money.IndexOf("."), money.Length);
}
}
else
{
if (changestr != "")
{
changestr = n5.Substring(0, len) + "," + changestr;
}
else
{
changestr = n5.Substring(0, len);
}
}
return changestr;
}
smallstr = n5.Substring(len - 3, len);这一句的时候报错。求解决!
这个是用于做金额转换的,例如,1000 用这个函数转换后就是1,000 每隔三位加一个,号
smallstr = n5.Substring(len - 3<0?0:len - 3, len>n5.Length-1?n5.Length-1:len)这样写的话输入1000是没问题,但超过就会报错。
25 个解决方案
#1
Substring越界了,或者 IndexOf 的返回值越界了
#2
但这个函数用js写没有一点问题啊!
#3
那肯定截取的时候,开始的索引值和结束的索引值有问题呗,len - 3 或大于len 或len-3成负值了
你可以试着用String.Format()这个函数来做处理,网上应该有例子
你可以试着用String.Format()这个函数来做处理,网上应该有例子
#4
smallstr = n5.Substring(len - 3, len);
测试看看这段是不是有问题。
如果你写的是1000
smallstr = n5.Substring(3- 3, 3);
如果你超过了,比如10000
smallstr = n5.Substring(4- 3, 4);(从第2个开始,截取4个。所以就超过了。)
测试看看这段是不是有问题。
如果你写的是1000
smallstr = n5.Substring(3- 3, 3);
如果你超过了,比如10000
smallstr = n5.Substring(4- 3, 4);(从第2个开始,截取4个。所以就超过了。)
#5
需要测试,我发觉我刚才说的是不对的。
但是你(smallstr = n5.Substring(len - 3, len);)这里肯定有问题。
但是你(smallstr = n5.Substring(len - 3, len);)这里肯定有问题。
#6
需要测试,我发觉我刚才说的是不对的。
但是你(smallstr = n5.Substring(len - 3, len);)这里肯定有问题。
但是你(smallstr = n5.Substring(len - 3, len);)这里肯定有问题。
#7
能否给个具体的解决方法?
#8
是这一句报错,超过10000就报错。
#9
你可以直接用ToString()
格式说明符 说明 示例 输出
C 货币 2.5.ToString("C") ¥2.50
D 十进制数 25.ToString("D5") 00025
E 科学型 25000.ToString("E") 2.500000E+005
F 固定点 25.ToString("F2") 25.00
G 常规 2.5.ToString("G") 2.5
N 数字 2500000.ToString("N") 2,500,000.00
X 十六进制 255.ToString("X") FF
具体代码就是
格式说明符 说明 示例 输出
C 货币 2.5.ToString("C") ¥2.50
D 十进制数 25.ToString("D5") 00025
E 科学型 25000.ToString("E") 2.500000E+005
F 固定点 25.ToString("F2") 25.00
G 常规 2.5.ToString("G") 2.5
N 数字 2500000.ToString("N") 2,500,000.00
X 十六进制 255.ToString("X") FF
具体代码就是
string temp = "2500000.0056";
int count = Regex.Match(temp,@"(?<=\.)\d+").Value.Length;
string ss = double.Parse(temp).ToString("N" + count);//2,500,000.0056
#10
len改为3
#11
changestr = n5.Substring(0, len) + "," + changestr + money.Substring(money.IndexOf("."), money.Length);
money.Length改为 money.Length-money.IndexOf(".")
money.Length改为 money.Length-money.IndexOf(".")
#12
都没到这一步来啊,前面就已经报错了。
#13
都没到这一步来啊,前面就已经报错了。
#14
都没到这一步来啊,前面就已经报错了。
#15
smallstr = n5.Substring(len - 3, len);改为smallstr = n5.Substring(len - 3, 3);
#16
这不是结贴了吗
if (n5.Length < 500)
{
n5.Substring(len - 3 < 0 ? 0 : len - 3, len > n5.Length - 1 ? n5.Length - 1 : len);
}
else {
smallstr = n5.ToArray().ToList().Skip(len - 3 < 0 ? 0 : len - 3).Skip(len > n5.Length - 1 ? n5.Length - 1 : len).ToString();
}
if (n5.Length < 500)
{
n5.Substring(len - 3 < 0 ? 0 : len - 3, len > n5.Length - 1 ? n5.Length - 1 : len);
}
else {
smallstr = n5.ToArray().ToList().Skip(len - 3 < 0 ? 0 : len - 3).Skip(len > n5.Length - 1 ? n5.Length - 1 : len).ToString();
}
#17
修改为:
bigstr = n5.Substring(0, len - 3);
smallstr = n5.Substring(len - 3,3);
#18
上面写错了应该这样
smallstr = n5.ToArray().ToList().Skip(len - 3 < 0 ? 0 : len - 3).Take(len > n5.Length - 1 ? n5.Length - 1 : len).ToString();
smallstr = n5.ToArray().ToList().Skip(len - 3 < 0 ? 0 : len - 3).Take(len > n5.Length - 1 ? n5.Length - 1 : len).ToString();
#19
int strar = len - 3 < 0 ? 0 : len - 3;
int length = len > n5.Length - 1 ? n5.Length - 1 : len;
n5.ToArray().ToList().Skip(strar).Take(length).ToList().ForEach(c => { smallstr += c; });
- -这次对了。测过了。上面的想的太美了。
#20
我晕,每隔3位+逗号直接用ToString("N0")不就行了,还弄出那么一大段的方法来-_-`
输入:3456789
输出:3,456,789
static void Main(string[] args)
{
int a=Convert.ToInt32(Console.ReadLine());
Console.Write(a.ToString("N0"));
Console.ReadKey();
}
输入:3456789
输出:3,456,789
#21
轻轻一笑...
#22
20楼的方法解决不了你的问题?你写的的那个也....
#23
直白的说就是你的数组中没有你指定的下标
#24
数组下标越界或者超出范围导致的错误。
(smallstr = n5.Substring(len - 3, len);)
你对len的长度去进行一个判断看是否大于小于3,加个判断不就完了,另外LZ你的代码写的眼花缭乱的看的都头大,实在要这样写就自己封装一个方法,那使用起来多方便。
(smallstr = n5.Substring(len - 3, len);)
你对len的长度去进行一个判断看是否大于小于3,加个判断不就完了,另外LZ你的代码写的眼花缭乱的看的都头大,实在要这样写就自己封装一个方法,那使用起来多方便。
#25
非常感谢各位大侠的帮忙,问题已经解决了。
#1
Substring越界了,或者 IndexOf 的返回值越界了
#2
但这个函数用js写没有一点问题啊!
#3
那肯定截取的时候,开始的索引值和结束的索引值有问题呗,len - 3 或大于len 或len-3成负值了
你可以试着用String.Format()这个函数来做处理,网上应该有例子
你可以试着用String.Format()这个函数来做处理,网上应该有例子
#4
smallstr = n5.Substring(len - 3, len);
测试看看这段是不是有问题。
如果你写的是1000
smallstr = n5.Substring(3- 3, 3);
如果你超过了,比如10000
smallstr = n5.Substring(4- 3, 4);(从第2个开始,截取4个。所以就超过了。)
测试看看这段是不是有问题。
如果你写的是1000
smallstr = n5.Substring(3- 3, 3);
如果你超过了,比如10000
smallstr = n5.Substring(4- 3, 4);(从第2个开始,截取4个。所以就超过了。)
#5
需要测试,我发觉我刚才说的是不对的。
但是你(smallstr = n5.Substring(len - 3, len);)这里肯定有问题。
但是你(smallstr = n5.Substring(len - 3, len);)这里肯定有问题。
#6
需要测试,我发觉我刚才说的是不对的。
但是你(smallstr = n5.Substring(len - 3, len);)这里肯定有问题。
但是你(smallstr = n5.Substring(len - 3, len);)这里肯定有问题。
#7
能否给个具体的解决方法?
#8
是这一句报错,超过10000就报错。
#9
你可以直接用ToString()
格式说明符 说明 示例 输出
C 货币 2.5.ToString("C") ¥2.50
D 十进制数 25.ToString("D5") 00025
E 科学型 25000.ToString("E") 2.500000E+005
F 固定点 25.ToString("F2") 25.00
G 常规 2.5.ToString("G") 2.5
N 数字 2500000.ToString("N") 2,500,000.00
X 十六进制 255.ToString("X") FF
具体代码就是
格式说明符 说明 示例 输出
C 货币 2.5.ToString("C") ¥2.50
D 十进制数 25.ToString("D5") 00025
E 科学型 25000.ToString("E") 2.500000E+005
F 固定点 25.ToString("F2") 25.00
G 常规 2.5.ToString("G") 2.5
N 数字 2500000.ToString("N") 2,500,000.00
X 十六进制 255.ToString("X") FF
具体代码就是
string temp = "2500000.0056";
int count = Regex.Match(temp,@"(?<=\.)\d+").Value.Length;
string ss = double.Parse(temp).ToString("N" + count);//2,500,000.0056
#10
len改为3
#11
changestr = n5.Substring(0, len) + "," + changestr + money.Substring(money.IndexOf("."), money.Length);
money.Length改为 money.Length-money.IndexOf(".")
money.Length改为 money.Length-money.IndexOf(".")
#12
都没到这一步来啊,前面就已经报错了。
#13
都没到这一步来啊,前面就已经报错了。
#14
都没到这一步来啊,前面就已经报错了。
#15
smallstr = n5.Substring(len - 3, len);改为smallstr = n5.Substring(len - 3, 3);
#16
这不是结贴了吗
if (n5.Length < 500)
{
n5.Substring(len - 3 < 0 ? 0 : len - 3, len > n5.Length - 1 ? n5.Length - 1 : len);
}
else {
smallstr = n5.ToArray().ToList().Skip(len - 3 < 0 ? 0 : len - 3).Skip(len > n5.Length - 1 ? n5.Length - 1 : len).ToString();
}
if (n5.Length < 500)
{
n5.Substring(len - 3 < 0 ? 0 : len - 3, len > n5.Length - 1 ? n5.Length - 1 : len);
}
else {
smallstr = n5.ToArray().ToList().Skip(len - 3 < 0 ? 0 : len - 3).Skip(len > n5.Length - 1 ? n5.Length - 1 : len).ToString();
}
#17
修改为:
bigstr = n5.Substring(0, len - 3);
smallstr = n5.Substring(len - 3,3);
#18
上面写错了应该这样
smallstr = n5.ToArray().ToList().Skip(len - 3 < 0 ? 0 : len - 3).Take(len > n5.Length - 1 ? n5.Length - 1 : len).ToString();
smallstr = n5.ToArray().ToList().Skip(len - 3 < 0 ? 0 : len - 3).Take(len > n5.Length - 1 ? n5.Length - 1 : len).ToString();
#19
int strar = len - 3 < 0 ? 0 : len - 3;
int length = len > n5.Length - 1 ? n5.Length - 1 : len;
n5.ToArray().ToList().Skip(strar).Take(length).ToList().ForEach(c => { smallstr += c; });
- -这次对了。测过了。上面的想的太美了。
#20
我晕,每隔3位+逗号直接用ToString("N0")不就行了,还弄出那么一大段的方法来-_-`
输入:3456789
输出:3,456,789
static void Main(string[] args)
{
int a=Convert.ToInt32(Console.ReadLine());
Console.Write(a.ToString("N0"));
Console.ReadKey();
}
输入:3456789
输出:3,456,789
#21
轻轻一笑...
#22
20楼的方法解决不了你的问题?你写的的那个也....
#23
直白的说就是你的数组中没有你指定的下标
#24
数组下标越界或者超出范围导致的错误。
(smallstr = n5.Substring(len - 3, len);)
你对len的长度去进行一个判断看是否大于小于3,加个判断不就完了,另外LZ你的代码写的眼花缭乱的看的都头大,实在要这样写就自己封装一个方法,那使用起来多方便。
(smallstr = n5.Substring(len - 3, len);)
你对len的长度去进行一个判断看是否大于小于3,加个判断不就完了,另外LZ你的代码写的眼花缭乱的看的都头大,实在要这样写就自己封装一个方法,那使用起来多方便。
#25
非常感谢各位大侠的帮忙,问题已经解决了。