首页 新闻 会员 周边

强制转换出问题??!!

0
悬赏园豆:5 [已解决问题] 解决于 2010-07-16 07:59

我们上课做了强制转换的示例,double->float,3.1215924转换成3.141593,但3.1415914转换后是3.141591,换成3.1515934却还是3.151593,这是什么情况啊???是用c#在.net平台做的。

ㄒ呒〤ē茗的主页 ㄒ呒〤ē茗 | 初学一级 | 园豆:195
提问于:2010-07-15 09:34
< >
分享
最佳答案
0

刚刚查阅了MSDN,给出的解释是float的精度为7 位,所以转换会进行四舍五入。

我测试了下,没有发现有楼主描述的问题,测试代码如下:

代码
double d = 3.1215924;
float f = (float)d;
Console.WriteLine(f.ToString());
//输出的结果是:3.121592

d
= 3.1415914;
f
= (float)d;
Console.WriteLine(f.ToString());
//输出的结果是:3.141591

d
= 3.1515934;
f
= (float)d;
Console.WriteLine(f.ToString());
//输出的结果是:3.151593

 

收获园豆:3
SamuelWoo | 菜鸟二级 |园豆:333 | 2010-07-15 15:35
其他回答(3)
0

强制转换时,使用的是四舍五入。下面代码可以达到你期待的转换效果:

 

double x = 3.1215924;
float y = (float)(System.Math.Floor(x * 1000000) + 1) / 1000000;

 

dudu | 园豆:31003 (高人七级) | 2010-07-15 10:24
0

也可以使用round

static void Main(string[] args)
{
double x = 3.1215914;
ShowNumber(x);

x
= 3.1215924;
ShowNumber(x);

x
= 3.1215934;
ShowNumber(x);

Console.ReadKey();
}
static void ShowNumber(double dbl)
{
Console.WriteLine(dbl.ToString()
+"(double)>>>"+(float)System.Math.Round(dbl,8)+"(float)");
}

 

结果:

3.1215914(double)>>>3.121591(float)
3.1215924(double)>>>3.121592(float)
3.1215934(double)>>>3.121593(float)

收获园豆:2
邀月 | 园豆:25475 (高人七级) | 2010-07-15 10:58
我是问为什么有这样的情况,代码的实现都会的,就是不知道原因!不是有什么银行家进制吗?
支持(0) 反对(0) ㄒ呒〤ē茗 | 园豆:195 (初学一级) | 2010-07-15 12:54
@ㄒ呒〤ē茗:你是怎么转换的?
支持(0) 反对(0) 邀月 | 园豆:25475 (高人七级) | 2010-07-15 13:51
找到问题了,我的输出有问题,麻烦各位了!我的错!!!
支持(0) 反对(0) ㄒ呒〤ē茗 | 园豆:195 (初学一级) | 2010-07-16 07:56
0

测试结果和LS一样,没遇到

ilove86 | 园豆:215 (菜鸟二级) | 2010-07-16 00:11
抱歉,我给的分数是奇数,下次一定给你满分!
支持(0) 反对(0) ㄒ呒〤ē茗 | 园豆:195 (初学一级) | 2010-07-16 07:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册