在银行之类的企业里面,会遇到很多数字,特别是小数,对于小数精度的保留是许多程序员要注意的事情。
Math.Round(0.333333,2);//按照四舍五入的国际标准
double dbdata=0.335333;
string str1=String.Format("{0:F}",dbdata);//默认为保留两位
decimal.Round(decimal.Parse("0.3333333"),2)
private System.Globalization.NumberFormatInfo nfi = new System.Globalization.NumberFormatInfo();
float test=0.333333f;
nfi.NumberDecimalDigits=2;
string result=test.ToString("N", nfi);
string result= String.Format("{0:N2}",Convert.ToDecimal("0.333333").ToString());
// 这是个保留两位小数并加千分位符号的方法
Convert.ToDouble(DataBinder.Eval(dbr, "入账学杂费")).ToString("n");
现有要求如下,确定了精度(如 0.001),对数字做不同的处理
1.正数,如12.1111,则需转换为12.112,而12.11则仍为12.11,即按精度截取,但 不是四舍五入,而是如果是正数则进1
2.附属,如-12.1111,则需转换为-12.111,即如果为负数,则去掉
我 的想法:
1.将数字转换为字符串类型,获取小数的位数,如0.01则小数位数为2
2.根据位数判断,如果要转换的数的小数位 数小于等于精度的小数位数,则无需转换(也无需判断正负)
3.如果 要转换的数的小数位数大于精度的小数位数,则需转换并需判断正负
4. 如果为正数,将要转换的数与精度(必须为0.01类似的形式)相加并截取精度的小数位数的字符串
5.如果为负数,直接截取
下 面是我的代码:
我 知道这样做肯定会存在很多问题,例如在数字转换字符串时候精度丢失之类的问题,但只是目前我的想法,希望大虾们教我下,什么方法更好,更方便(我已经在博客园发表了,现在抄过来,嘿嘿)