抽空期间写了一个 药费帐户统计系统 因为使用对象是母亲大人 所以再输入费用一栏中 经常会出现一些预想不到的情况 :
18.35 会被输入成
18。35
18.3。5
18。 35
18,35
18,35
非单个正确位置的数学小数点符号,而出现大量 1. 2。3, 4, 这4个符号,还有在18.35各种位置出现未知数量的空格情况,导致数据类型不匹配的报错。
0.45 会被输入成
.45
。45
,45
,45 当然也可能有空格在其中。
为解决这个问题只好对输入的内容进行不是足够安全的预处理(抛出异常提示,对于母亲基本等于没用)
using System.Text.RegularExpressions;
public static string changedecimal(string str1)
{
str1 = str1.Trim();
str1 = Regex.Replace(str1, @" * ", "");//对空格做了处理所有的空格都被去掉了
string str4 = "";//原先的方法出了问题,这里不高心重新改所有相关变量名了,所以就用了str4
for (int i = 0; i < str1.Length; i++)//将所有的不需要的(这里是标点符号||标点逗号||逗号)符号替换为句号
{
if (str1[i].ToString() == "." || str1[i].ToString() == ","||str1[i].ToString() == ",")
str4 = str4 + "。";
else
str4 = str4 + str1[i];
}
string str2 = "";
for (int i = 0, once = 0; i < str4.Length; i++)//注意这里多了个once变量,功能只保留第一个出现的句号
{
if (once == 1)
{
for (int j = i; str4[j].ToString() == "。";j++ )
{
i = j + 1;
}
}
if (str4[i].ToString() == "。")
{
once = 1;
}
str2 = str2 + str4[i];
}
string str3 = "";
for (int i = 0; i < str2.Length; i++)//将以句号为首的字符串自动前面补0
{
if (i == 0)
{
if (str2[0].ToString() == "。" )
{ str3 = "0"; }
}
if (i >= 0)
{
if (str2[i].ToString() == "。" )
{
str3 = str3 + ".";
}
else
{ str3 = str3 + str2[i]; }
}
}
return str3;
}
这样 str3 就是经过处理后的字符了。
不安全地方在于如果一个数是135.45 被输入成 13.5.45会变成13.545
18.35 会被输入成
18。35
18.3。5
18。 35
18,35
18,35
非单个正确位置的数学小数点符号,而出现大量 1. 2。3, 4, 这4个符号,还有在18.35各种位置出现未知数量的空格情况,导致数据类型不匹配的报错。
0.45 会被输入成
.45
。45
,45
,45 当然也可能有空格在其中。
为解决这个问题只好对输入的内容进行不是足够安全的预处理(抛出异常提示,对于母亲基本等于没用)
using System.Text.RegularExpressions;
public static string changedecimal(string str1)
{
str1 = str1.Trim();
str1 = Regex.Replace(str1, @" * ", "");//对空格做了处理所有的空格都被去掉了
string str4 = "";//原先的方法出了问题,这里不高心重新改所有相关变量名了,所以就用了str4
for (int i = 0; i < str1.Length; i++)//将所有的不需要的(这里是标点符号||标点逗号||逗号)符号替换为句号
{
if (str1[i].ToString() == "." || str1[i].ToString() == ","||str1[i].ToString() == ",")
str4 = str4 + "。";
else
str4 = str4 + str1[i];
}
string str2 = "";
for (int i = 0, once = 0; i < str4.Length; i++)//注意这里多了个once变量,功能只保留第一个出现的句号
{
if (once == 1)
{
for (int j = i; str4[j].ToString() == "。";j++ )
{
i = j + 1;
}
}
if (str4[i].ToString() == "。")
{
once = 1;
}
str2 = str2 + str4[i];
}
string str3 = "";
for (int i = 0; i < str2.Length; i++)//将以句号为首的字符串自动前面补0
{
if (i == 0)
{
if (str2[0].ToString() == "。" )
{ str3 = "0"; }
}
if (i >= 0)
{
if (str2[i].ToString() == "。" )
{
str3 = str3 + ".";
}
else
{ str3 = str3 + str2[i]; }
}
}
return str3;
}
这样 str3 就是经过处理后的字符了。
不安全地方在于如果一个数是135.45 被输入成 13.5.45会变成13.545