Float 数据类型相关问题

mysql中的float精度问题(http://blog.sina.com.cn/s/blog_6dbaeb9b0100vm5r.html

要得到1位或2位精确小数的话,整数不能高于 32767

即:f<32767.99


因为 2E15=32768

 所以最多只能正确处理0~32767的整数,

 


要得到3位 精确 小数的话,整数不能高于16383

即:f< 16383 .999

因为 2E14=16384

 

 

 

 

 

 


要得到4位 精确 小数,整数不能高于2047

即:f< 2047 .9999

而 2E11=2048

 

 

 

要得到5位 精确 小数,整数不能高于127

即:f< 127 .99999

而 2E7=128

 

 

 

要得到6位 精确 小数,整数不能高于15

即:f<15 .999999

而 2E4=16

 


要得到7位 精确 小数,整数不能高于0

即:f< 0 .9999999

而 2E0=0

 


要得到8位以上的 精确 小数,是不可能的

即:f不存在

 

在C#中大家都会遇到这种情况 double类型的数据,需要格式化(保留N未有效数字)或者是保留N为小数等情况,我们往往采取double.tostring("参数");的方法。下面就列出几个常用的方法。

double temp=3.1415926;

(F)Fixed point:string str1=temp.toString("f1");//保留一位小数 四舍五入 结果:3.1

(F)Fixed point:string str2=temp.toString("f2");//保留两位小数,四舍五入 下面一次类推 结果:3.14

(N)Number:string str2=temp.toString("N");//保留 结果:3.14

(G)General (default):string str2=temp.toString("G");//保留 结果:3.1415926

(P)Percent:string str2=temp.toString("P");//保留 结果:314.16%

(E)Scientific:string str2=temp.toString("E");//保留 结果E:3.141593E+000

(C)Currency:string str2=temp.toString("C");//保留 结果:¥3.14

 

对于double temp=0.000000926的情况,上述方法都不管用,可以通过转成decimal格式再显示。如下所示:

string str = ((decimal)temp).toString();

posted @ 2013-12-21 08:52  平常心队长  阅读(307)  评论(0)    收藏  举报