string保留两位小数点. 有难度!

che2piaopiao 2009-01-06 03:57:38

DataColumn dc = new DataColumn();
dc.ColumnName = "bfb";
dc.Expression ="(sl/"+b+")";
dt.Columns.Add(dc);


sl,b都是int型的,但添加这一列后是 0.1123214123123


现在想让它显示 11.23%

咋整啊????
...全文
3380 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
bossmaster 2011-08-01
  • 打赏
  • 举报
回复
我借鉴楼上的方法,直接将用的a.tostring("0.00")实现了取小数后的两位小数。学习了……谢谢楼主及各位了
bossmaster 2011-08-01
  • 打赏
  • 举报
回复
Math.Round(a,b)很强大,但是,a的类型却受到限制……
cfanshappy 2010-11-26
  • 打赏
  • 举报
回复
foreach (DataRow dr in dt.Rows)
{
dr[2] = string.Format("{0:N2}", dr[2]);
}
che2piaopiao 2009-01-08
  • 打赏
  • 举报
回复
继续,不够再加分!
yanlongwuhui 2009-01-07
  • 打赏
  • 举报
回复
GZ
syc958 2009-01-07
  • 打赏
  • 举报
回复
看错了....



C# 中没有四舍五入函数,程序语言都没有四舍五入函数,因为四舍五入算法不科学,国际通行的是 Banker 舍入法

Bankers rounding(银行家舍入)算法,即四舍六入五取偶。事实上这也是 IEEE 规定的舍入标准。因此所有符合 IEEE 标准的语言都应该是采用这一算法的

Math.Round 方法默认的也是 Banker 舍入法

在 .NET 2.0 中 Math.Round 方法有几个重载方法
Math.Round(Decimal, MidpointRounding)
Math.Round(Double, MidpointRounding)
Math.Round(Decimal, Int32, MidpointRounding)
Math.Round(Double, Int32, MidpointRounding)

将小数值舍入到指定精度。MidpointRounding 参数,指定当一个值正好处于另两个数中间时如何舍入这个值

该参数是个 MidpointRounding 枚举

此枚举有两个成员,MSDN 中的说明是:
AwayFromZero 当一个数字是其他两个数字的中间值时,会将其舍入为两个值中绝对值较小的值。
ToEven 当一个数字是其他两个数字的中间值时,会将其舍入为最接近的偶数。

注 意!这里关于 MidpointRounding.AwayFromZero 的说明是错误的!实际舍入为两个值中绝对值较大的值。不过 MSDN 中的 例子是正确的,英文描述原文是 it is rounded toward the nearest number that is away from zero.

所以,要实现四舍五入函数,对于正数,可以加一个 MidpointRounding.AwayFromZero 参数指定当一个数字是其他两个数字的中间值时其舍入为两个值中绝对值较大的值,例:

Math.Round(3.45, 2, MidpointRounding.AwayFromZero)

不过对于负数上面的方法就又不对了

因此需要自己写个函数来处理
第一个函数:
double Round(double value, int decimals)
{
if (value < 0)
{
return Math.Round(value + 5 / Math.Pow(10, decimals + 1), decimals, MidpointRounding.AwayFromZero);
}
else
{
return Math.Round(value, decimals, MidpointRounding.AwayFromZero);
}
}

第二个函数:
double Round(double d, int i)
{
if(d >=0)
{
d += 5 * Math.Pow(10, -(i + 1));
}
else
{
d += -5 * Math.Pow(10, -(i + 1));
}
string str = d.ToString();
string[] strs = str.Split('.');
int idot = str.IndexOf('.');
string prestr = strs[0];
string poststr = strs[1];
if(poststr.Length > i)
{
poststr = str.Substring(idot + 1, i);
}
string strd = prestr + "." + poststr;
d = Double.Parse(strd);
return d;
}

参数:d表示要四舍五入的数;i表示要保留的小数点后为数。

其中第二种方法是正负数都四舍五入,第一种方法是正数四舍五入,负数是五舍六入。

备注:个人认为第一种方法适合处理货币计算,而第二种方法适合数据统计的显示。
syc958 2009-01-07
  • 打赏
  • 举报
回复
String.Format("{0:F2}",56789); 的结果是56789.00

以后怎么弄就看你自己了
che2piaopiao 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 sprc_lcl 的回复:]
我还没想出来,楼上的大大们如果真的能搞出来就贴代码出来,别瞎叫
[/Quote]


呵呵
QQ306832666 2009-01-07
  • 打赏
  • 举报
回复
楼上的 值得学习!
chinawes 2009-01-07
  • 打赏
  • 举报
回复
{0:N2}小数点保留2位有效数字;
{0:N2}% 小数点保留2位有效数字加百分号;


double i = 0.1123214123123 ;
Console.WriteLine("{0:N2}%", i);
sprc_lcl 2009-01-07
  • 打赏
  • 举报
回复
你干脆再循环一遍把这列的值改一遍好了

dt.Rows[i]["bfb"] = (Convert.ToDouble(dt.Rows[i]["bfb"])*100).ToString("0.00")+"%";

不想了..
sprc_lcl 2009-01-07
  • 打赏
  • 举报
回复
我还没想出来,楼上的大大们如果真的能搞出来就贴代码出来,别瞎叫
晴风smile 2009-01-07
  • 打赏
  • 举报
回复
up!!
Working20000 2009-01-07
  • 打赏
  • 举报
回复
Tostring("P2")
naturade 2009-01-07
  • 打赏
  • 举报
回复
kldx5092 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 gonghuaqiao 的回复:]
Double.Parse("111.11111111").ToString("f2");
要留几个小数点 只要在Tostring("")写f几 就行啦
[/Quote]
right
qq196260188 2009-01-07
  • 打赏
  • 举报
回复
没什么好说了,,楼上那么多高手都说了
wangxiaofeiwuqiao 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 che2piaopiao 的回复:]
dc.Expression = double.Parse("(sl/" + b + ")").ToString("0.00") ;

输入字符串的格式不正确。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.FormatException: 输入字符串的格式不正确。
[/Quote]

"(sl/" + b + ")"这里有问题
mqc507 2009-01-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 greatverve 的回复:]
这位兄弟学习能力不一般。记得是个菜鸟,现在像是在研究复杂问题。
你会不会是钻牛角尖的,咋搞这么复杂?
[/Quote]
我看到血了,一针就扎出来了。
shunanlove 2009-01-06
  • 打赏
  • 举报
回复
LZ很搞笑
加载更多回复(13)
1基础题_2.由计算机生成简单的四则运算题 1.1 需求分析: 本题主要是要求设计一个可以自动生成四则运算的测试器,并且完全由用户决定出加、减、乘、除哪一种运算题,以及出一位数还是两位数的运算题,同时还要对用户给出的答案的对错进行判断。在程序运行过程中,用户可以选择何时结束程序,并在结束程序时给出一个某种形式的成绩。 ///////////////////////////////////////////// 程序执行的结果://///////////////////////////////////////////////// 1.2 概要设计: 在对题目理解的基础上,并针对几个特别的技术环节,我认为程序可分为三个部分: 1) 程序的欢迎界面,主要通过一些特殊制表符来完成。其中运行,退出程序可以通过一个while循环来判定同时还要考虑用户输入信号量的正误; 2) 出题函数,也是本程序最关键的一个函数,通过使用“rand()%10”或“rand()%100”来获得一个0到9的一位整数随机值或得到0到99的两位整数随机值来为用户出题,并判断用户答案的对错; 3) 评分系统,是在用户选择退出后对用户所答题情况给出的成绩评价。 /////////////////////////////////////////////////// 程序流程图: 1.3 详细设计与编码: 为了使程序更加简洁与工整,且容易修改和阅读,我采用头文件的方式将Exam()函数放在了Exam .h中。Exam()函数主要负责程序的出题和结果的判断,其输入接口为运算符号,位数,即只需向其输入四则运算的一种符号和运算的位数,函数便自动生成题目并自动判断结果的正误,结果以1,0返回。而主程序则是完成了程序的开始、结束,用户成绩的判定。 /////////////////////////////////////////////////// 具体源程序如下: ---------------------------------------------------------------------------------------------------------------------- int Exam(int figure, int sign) {//本函数负责给用户出题 if (figure!=1&&figure!=2&&sign<1&&sign>4) return 0; //判断函数的输入是否符合要求 int a, b; if (figure==1) a=rand()%10; b=rand()%10; if (figure==2) a=rand()%100; b=rand()%100; switch(sign) { case(1): { cout<<" "<>r; if(r!=a+b) { cout<<" "<<"╳ 很遗憾,回答错误! X﹏X "<