c# 百分比计算 小白SOS

u010703853 2014-05-21 11:31:44
最近开发一个小程序:
计算百分数的平均值,由于百分数不能直接参与计算,
我转换如下


Decimal D1 = Decimal.Parse(Label104.Text.Substring(0, Label104.Text.Length - 1));
D1 /= 100;
Label104.Text = D1.ToString();

Decimal D2 = Decimal.Parse(Label105.Text.Substring(0, Label105.Text.Length - 1));
D2 /= 100;
Label105.Text = D2.ToString();

Decimal D3 = Decimal.Parse(Label106.Text.Substring(0, Label106.Text.Length - 1));
D3 /= 100;
Label106.Text = D3.ToString();

....................

Decimal D193 = Decimal.Parse(Label297.Text.Substring(0, Label297.Text.Length - 1));
D193 /= 100;
Label297.Text = D193.ToString();

Decimal D194 = Decimal.Parse(Label298.Text.Substring(0, Label298.Text.Length - 1));
D194 /= 100;
Label298.Text = D194.ToString();

Decimal D195 = Decimal.Parse(Label299.Text.Substring(0, Label299.Text.Length - 1));
D195 /= 100;
Label299.Text = D195.ToString();


我用的是笨方法来转换成小数的, 可 累坏了。
可是现在又有一个难题 了, 就是来计算平均值。
比如 计算 D1 ,D2,D3,D4,D5,D6,D7,D8,D9,D10 的平均值, 但是有个前提就是 百分比为0的 不带入计算。(计算平均值)

总共有200个 百分比来计算, 这么搞法,能把我给累残了。。。。大侠们有没有好的办法呢?
最好上代码,方法的话,太泛泛了。。。。 because 我是小白....
不要嫌分少 (⊙o⊙)哦
...全文
987 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
youzelin 2014-05-23
  • 打赏
  • 举报
回复

private void Form1_Load(object sender, EventArgs e)
{
    var average = Controls.OfType<Label>().Select(l => ConvertStringToDecimal(l)).Where(d => d != 0M).Average();
    textBox1.Text = average.ToString();
}

private decimal ConvertStringToDecimal(Label label)
{
    var value = decimal.Parse(label.Text.Substring(0, label.Text.Length - 1)) / 100M;
    label.Text = value.ToString();
    return value;
}
水目 2014-05-22
  • 打赏
  • 举报
回复
引用 22 楼 u010703853 的回复:
[quote=引用 18 楼 xgp0009 的回复:] 你把你做的程序界面截图发过来看看。
webform 页面 其中 背景色为白色的label 在数据库中获取的值的 本身就是百分数, 最下面一行 和 最右边的一列 都是来计算 改行该列的 平均值 (0%的 就不计算啦) 196个label 我换算了 196次 快崩溃啦... 具体可看下图. [/quote] 看你这个应该是报表啊 你这个。。。。。。
  • 打赏
  • 举报
回复
引用 29 楼 liu2008hz 的回复:
[quote=引用 9 楼 u010703853 的回复:] [quote=引用 8 楼 mh_ma 的回复:] for循环不会?数组不会? 看一个例子也知道怎么用了
哥哥,例子何在/[/quote] 例子在百度,在GOOGLE,作为一个程序员,连查找资料解决最基本的能力都没有,你觉得在这行你能做多久?[/quote] 短短一句话,意义深刻 给你敬个礼
Hertz_liu 2014-05-22
  • 打赏
  • 举报
回复
引用 9 楼 u010703853 的回复:
[quote=引用 8 楼 mh_ma 的回复:] for循环不会?数组不会? 看一个例子也知道怎么用了
哥哥,例子何在/[/quote] 例子在百度,在GOOGLE,作为一个程序员,连查找资料解决最基本的能力都没有,你觉得在这行你能做多久?
江湖的传说 2014-05-22
  • 打赏
  • 举报
回复
界面显示建议 LZ 考虑下 GridView 之类的数据控件,用 Label 不是明智的做法
  • 打赏
  • 举报
回复
引用 25 楼 u013702063 的回复:
[quote=引用 23 楼 u010703853 的回复:] 把百分数转化为 小数呀, 在数据库中存的格式就是 百分数 nvarchar(10)型 怎么转化 对不对呢?
个人认为数据表的设计不太合理,如果LZ 是想要显示 % 这个符号的话应该是属于界面数据显示的处理 百分数 是个数字属性呢,肯定是要进行加减等运算的, 另外,应该是从数据库读出的数据来 求平均值,而不是从显示的值来反推计算[/quote] 是的。。。。。。我现在要转换想法。这么搞下去,不是办法的,,,,谢谢大家给出的 方法。。。。
周美文 2014-05-22
  • 打赏
  • 举报
回复
LZ对UI的设计想象力实在太强大了!!!
  • 打赏
  • 举报
回复
这个,如果你真的是用一个一个小格子堆出这样的一个系统的话,我觉得你也十分强大了,至少你把我不想做的事给实现了,另外,你可以系统的学习一下数组,以及“数组”的控件的使用,你都敢拼出这样的一个表格,那学一下又有什么不敢的呢?
渃水 2014-05-22
  • 打赏
  • 举报
回复
引用 31 楼 qyj2009 的回复:
[quote=引用 22 楼 u010703853 的回复:] [quote=引用 18 楼 xgp0009 的回复:] 你把你做的程序界面截图发过来看看。
webform 页面 其中 背景色为白色的label 在数据库中获取的值的 本身就是百分数, 最下面一行 和 最右边的一列 都是来计算 改行该列的 平均值 (0%的 就不计算啦) 196个label 我换算了 196次 快崩溃啦... 具体可看下图. [/quote] 看你这个应该是报表啊 你这个。。。。。。[/quote] 你确定这每一个都是 Label,不应该是报表或者DataGridview、ListView什么的吗?
渃水 2014-05-22
  • 打赏
  • 举报
回复
循环呀,遍历控件,然后把值存入数组,之后对数组操作,我就手打了几句 List<double> shuzu=new List<double>(); foreach(var con in Form.Controls) { Label lbl=con as Label; if(lbl!=null) { shuzu.add( double.parse(lbl.text.substring() ) ); } }
  • 打赏
  • 举报
回复
引用 4 楼 Saleayas 的回复:
你的这些200 多个 label 都是一个一个写来着的??
恩 呵呵 累坏了。。。。虽然方法不对,但是我相信我还是很有耐心的,这也是一大亮点把。可是用错地方了,甚是可惜。。。 毫不掩饰的说, 之前我还写过340个label 赋值的事情比这个要复杂度 多了,也是不会数组,和那个什么 for 循环。。。 现在也是不会,在自学呢。 在努力,方法不对头,也是徒劳呀。。。。哎.....
Saleayas 2014-05-21
  • 打赏
  • 举报
回复
你的这些200 多个 label 都是一个一个写来着的??
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
先不谈LINQ,你能把数组给用上也不至于写那么多代码。 如果你的大脑不愿意劳动,那你的双手就活该受罪。
数组我不会呀 我查了下资料 可是不会用..... 你有相关的例子没有,我模仿下...
threenewbee 2014-05-21
  • 打赏
  • 举报
回复
先不谈LINQ,你能把数组给用上也不至于写那么多代码。 如果你的大脑不愿意劳动,那你的双手就活该受罪。
bdmh 2014-05-21
  • 打赏
  • 举报
回复
你把所有的数都放到一个数组中,直接用linq求平均
江湖的传说 2014-05-21
  • 打赏
  • 举报
回复
引用 23 楼 u010703853 的回复:
把百分数转化为 小数呀, 在数据库中存的格式就是 百分数 nvarchar(10)型 怎么转化 对不对呢?
个人认为数据表的设计不太合理,如果LZ 是想要显示 % 这个符号的话应该是属于界面数据显示的处理 百分数 是个数字属性呢,肯定是要进行加减等运算的, 另外,应该是从数据库读出的数据来 求平均值,而不是从显示的值来反推计算
  • 打赏
  • 举报
回复
引用 19 楼 u013702063 的回复:
楼主现有的代码是在做重复的动作,要注重代码重用,可以优化下:

private void UpdateLabelValue(Label lb)
{
    Decimal D1 = Decimal.Parse(lb.Text.Substring(0, lb.Text.Length - 1));
    D1 /= 100;
    lb.Text = D1.ToString();
}
private void UpdateAllLabel()
{
    UpdateLabelValue(label1);
    UpdateLabelValue(label2);
    //...
}
这个是很基本的要求了,就算要改 公式也只是改一个,不然要改上面个呢 当然 UpdateAllLabel() 这个函数也是在做重复的动作 如果用 Array / List / IEnumerable 把 所有的 label 提出一个访问接口,后续要更改需求也是很简单的事了
看你写的 还不错噢 ,,,, 我试试可以否.. 3Q
  • 打赏
  • 举报
回复
引用 17 楼 youzelin 的回复:
顺便问一下,Label297.Text.Substring(0, Label297.Text.Length - 1) 是为什么?数据是什么样的格式?
把百分数转化为 小数呀, 在数据库中存的格式就是 百分数 nvarchar(10)型 怎么转化 对不对呢?
  • 打赏
  • 举报
回复
引用 18 楼 xgp0009 的回复:
你把你做的程序界面截图发过来看看。

webform 页面
其中 背景色为白色的label 在数据库中获取的值的 本身就是百分数,
最下面一行 和 最右边的一列 都是来计算 改行该列的 平均值 (0%的 就不计算啦)
196个label 我换算了 196次 快崩溃啦...
具体可看下图.

tanta 2014-05-21
  • 打赏
  • 举报
回复
有句话说得好:战术的胜利无法弥补战略的失败 整个构架、设计就是战略,具体技术就是战术。没有好的设计、构架,后续的开发就会问题多多。。。
加载更多回复(15)

110,549

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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