decimal n = str.Split('.')[0].Substring(2).Where(d => d == '0').Count(s => s == '0');
我正在尝试这样做,以便我可以将代码输入到文本框中并计算零。无论我插入什么,都会乘以1,000,000。但是当首先输入零时。
实施例: 0.12 012.0 072 0.085
我的程序会崩溃并给我这个错误:“startIndex不能大于字符串的长度。”它崩溃了我先放入零的第二个。
这些是有用的: 12.0 850 0.82 5.6 等等,只要它不是0.任何修正?
这是我的所有代码:
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (uFCheckBox.Checked == true)
{
nFCheckBox.Checked = false;
pFCheckBox.Checked = false;
decimal x = 0;
if (Decimal.TryParse(textBox1.Text, out x))
{
var y = 1000000;
var answer = x * y;
displayLabel2.Text = (x.ToString().Replace(".", "").TrimStart(new Char[] { '0' }) + "00").Substring(0, 2);
var str = answer.ToString();
//decimal n = str.Split('.')[0].Substring(2, str.Length - 2).Count( s => s == '0');
//decimal n = str.Split('.')[0].Substring(2, str.Length - 2).Where(d => d == '0').Count(s => s == '0');
//decimal n = str.Split('.')[0].Where(d => d == '0').Count(s => s == '0');
decimal n = str.Split('.')[0].Substring(2).Where(d => d == '0').Count(s => s == '0');
displayLabel5.Text = n.ToString();
}
else
{
displayLabel2.Text = "error";
}
}
答案 0 :(得分:0)
这种情况正在发生,因为您正在尝试获取字符串的计数,并且该计数依赖于字符串长度至少为2个字符。
既然你知道它是不是2个字符,你不需要任何零,你就可以调整你的代码:
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (uFCheckBox.Checked == true)
{
nFCheckBox.Checked = false;
pFCheckBox.Checked = false;
decimal x = 0;
if (Decimal.TryParse(textBox1.Text, out x))
{
var y = 1000000;
var answer = x * y;
displayLabel2.Text = (x.ToString().Replace(".", "").TrimStart(new Char[] { '0' }) + "00").Substring(0, 2);
var str = answer.ToString();
//decimal n = str.Split('.')[0].Substring(2, str.Length - 2).Count( s => s == '0');
//decimal n = str.Split('.')[0].Substring(2, str.Length - 2).Where(d => d == '0').Count(s => s == '0');
//decimal n = str.Split('.')[0].Where(d => d == '0').Count(s => s == '0');
string splitString = str.Split('.')[0];
if(splitString.Length <= 2)
{
displayLabel5.Text = "0";
}
else
{
decimal n = str.Split('.')[0].Substring(2).Where(d => d == '0').Count(s => s == '0');
displayLabel5.Text = n.ToString();
}
}
else
{
displayLabel2.Text = "error";
}
}
}
这会在开头添加初始检查,如果文本框中字符串的长度小于或等于2,则自动将标签设置为0,否则开始评估