C# 小数取整的问题

来源:百度知道 编辑:UC知道 时间:2024/06/25 04:50:22
如题:
源数据单位为“元”,现在需统计为“万元”并做同期比。字段类型定义为了“decimal”,将源数据除以10000就得到了结果。现在是想问一下将结果保留两位小数的代码怎么写?(处理方法不确定,请把四舍五入和直接去掉后面尾数的方法都说一下)
感谢CloudPRose同志,现在的处理模式是这样的:
C#数据的类型为double(定义成decimal的存入数据库时小数位就没有了),数据库字段为float,存储的是原始的以“元”为单位的数字。在求同期比的时候先把两个金额转换成decimal后相减,得到的结果再转换为double(避免结果出现N位小数的情况)。TextBox的问题原来是没转过弯,总想是把数据转为“万元”进行显示,完了还得把它转为“元”再进行存储,其实只需要变量的格式化成“万元”显示就行了,存储的时候直接用变量中的值就完了。
因为过程用的是TextBox,这个问题已经解决了。最后的结果是用DataGridView列出的全年中分月数据,这个有办法处理成以“万元”为单位吗?

decimal num = 36270449.32
TextBox1.Text = string.Format("{0:0.00}", num / 10000);

数据的类型为double,数据库字段为float,两个只有两位小数的数字相减,结果怎么会有十多位小数喔?
这个是精度问题。

Math.Ceiling()向上取整; d = 4.56789 string res = Math.Ceiling(Convert.ToDecimal(d)).ToString() res=5
Math.Floor()向下取整 ;string res = Math.Floor(Convert.ToDouble(d)).ToString(); es=4
Math.Round是"就近舍入",当要舍入的是5时与"四舍五入"不同(取偶数),如:
Math.Round(0.5,0)=0

floor 和 ceiling是math unit 里的函数,使用前要先 Uses Math。
trunc 和 round 是system unit 里的函数,缺省就可以用。
floor 直接往小的取,比如 floor(-123.55)=-124,floor(123.55)=123
trunc 直接切下整数,比如 trunc(-123.55)=-123, floor(123.55)=123
ceil 直接往大的取,比如 ceil(-123.55)=-123, ceil(123.55)=124
round 计算四舍五入,比如 round(-123.55)=-124,round(123.55)=124

可以先用indexof()计算出小数点的位置,然后再用substring()取从小数点后面的两位和小数点前面的所有的数字,然后再把这两个变量相加,中间加一个小数点就可以了!不过取出来的是String类型的数据

money = decimal.Round(money, 2);

保留两位小数