【发布时间】:2015-07-01 18:21:18
【问题描述】:
decimal n = str.Split('.')[0].Substring(2).Where(d => d == '0').Count(s => s == '0');
我正在努力做到这一点,以便我可以在文本框中输入代码并计算零。无论我插入什么,都会乘以 1,000,000。但是当先输入一个零时。
示例: 0.12 012.0 072 .085
我的程序会崩溃并给我这个错误:“startIndex 不能大于字符串的长度。”我先输入一个零,它就会崩溃。
这些是有效的: 12.0 850 .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";
}
}
【问题讨论】:
-
忽略注释掉的 3 行,这些行工作最少,错误最多
-
"0.12".Split('.')[0] == "0"您试图在索引 2 处对结果字符串进行子串化,但结果字符串只有一个字符长。 -
但是如果我做 str.Split('.'[0] == "0" 那么我就不能再使用子字符串了。除非我不明白你在说什么
-
小旁注,与您的问题无关,但您可以使用以下方法计算 0 的出现次数:
str.Count(c => c == '0'); -
但我只想在我的主要数字(例如 72、10、40、50)被读取后计算零。不计算这些数字中已经存在的零。那我也想算到小数点前。如果这有任何意义