.net 取精度 decimal x=2.3333; textbox.text = x.tostring();打算去精度2,求解 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个结果应该是3吧,也有可能是2,不确定,只记得.net里面没有四舍五入 textbox.text = x.tostring("N2"); 截取字符串,取.以后的数字,然后再+0,最后成0.333截取字符串用substring 看错了,不好意思...!!这次不会错了... Banker's rounding(银行家舍入)算法,即四舍六入五取偶。事实上这也是 IEEE 规定的舍入标准。因此所有符合 IEEE 标准的语言都应该是采用这一算法的. 这个算法可以概括为:“四舍六入五考虑,五后非零就进一,五后皆零看奇偶,五前为偶应舍 去,五前为奇要进一。” 请看下面的例子: Math.Round(3.44, 1); //Returns 3.4. 四舍 Math.Round(3.451, 1); //Returns 3.5 五后非零就进一 Math.Round(3.45, 1); //Returns 3.4. 五后皆零看奇偶, 五前为偶应舍 去 Math.Round(3.75, 1); //Returns 3.8 五后皆零看奇偶,五前为奇要进一 Math.Round(3.46, 1); //Returns 3.5. 六入http://blog.csdn.net/lcyhjx/archive/2008/08/30/2851923.aspx string str = ((decimal)2.3333).ToString("0.00"); 我建议不要使用Math.Round函数,因为显示的时候会带来麻烦例如:decimal d = 3.85m;string s1 = d.ToString("N1"); string s2=Math.Round(d,1).ToString();这时s1和s2的结果不一致,因为Math.Round用的是银行家舍入,而decimal.ToString()用的是普通的四舍五入,这种情况屏幕显示或打印报表时都会给软件的使用者带来混乱.我现在如果需要对数字进行舍入运算用的是这种方式:decimal d=3.885m;d=decimal.Parse(d.ToString("#0.00"));虽然低效,但无论是计算,还是显示,都是稳定的,如果将来.Net的某一个Service Pack改变了Math.Round或decimal.ToString()的内部实现方式的话,对软件的运行不会产生任何影响. 去精度2?什么意思?x.ToString("0.00"); 微软在.Net中使用银行家舍入法,纯属给软件的开发带来添乱,因为SQL Server等许多软件都是用的普通的四舍五入,要程序员理解银行家舍入法没有任何意义,因为对于运算来说,不可改变的标准就是计算结果必须稳定,当多种语言开发的DLL,数据库都是一个应用程序的组成部分时,计算结果的不稳定会带来整个系统的稳定带来非常大的隐患. 请问用skinEngine改变窗口皮肤后如何恢复默认皮肤? 速结——C#委托和事件 顺序数插入的问题 UPDATE DATEGRIDVIEW 数据到ACCESS2007数据库 如何从 SHELL32.dll 中导出 XP 系统图标? 快速搜索问题 请高手指点:引用出现的问题 求C#三层模式的类库代码 如何在datagrid里运行时在众记录中插入一空白行。 DataGrid 中的格式如何统一 为何我的txtpassword无法显示其value值? C#随机数重复,极度郁闷
截取字符串用substring
这次不会错了...
Banker's rounding(银行家舍入)算法,即四舍六入五取偶。事实上这也是 IEEE 规定的舍入标准。因此所有符合 IEEE 标准的语言都应该是采用这一算法的. 这个算法可以概括为:“四舍六入五考虑,五后非零就进一,五后皆零看奇偶,五前为偶应舍 去,五前为奇要进一。”
请看下面的例子: Math.Round(3.44, 1); //Returns 3.4. 四舍 Math.Round(3.451, 1); //Returns 3.5 五后非零就进一
Math.Round(3.45, 1); //Returns 3.4. 五后皆零看奇偶, 五前为偶应舍 去 Math.Round(3.75, 1); //Returns 3.8 五后皆零看奇偶,五前为奇要进一
Math.Round(3.46, 1); //Returns 3.5. 六入
http://blog.csdn.net/lcyhjx/archive/2008/08/30/2851923.aspx
例如:
decimal d = 3.85m;
string s1 = d.ToString("N1");
string s2=Math.Round(d,1).ToString();
这时s1和s2的结果不一致,因为Math.Round用的是银行家舍入,而decimal.ToString()用的是普通的四舍五入,这种情况屏幕显示或打印报表时都会给软件的使用者带来混乱.我现在如果需要对数字进行舍入运算用的是这种方式:
decimal d=3.885m;
d=decimal.Parse(d.ToString("#0.00"));
虽然低效,但无论是计算,还是显示,都是稳定的,如果将来.Net的某一个Service Pack改变了Math.Round或decimal.ToString()的内部实现方式的话,对软件的运行不会产生任何影响.