C#隐式转换问题2个

混_混 2005-07-31 12:48:33
两个问题,一个10分

一、
为什么写
  float x1=3.0
会提示,不能将double类型隐式转换成float,而写成
  float x1=3

  float x1=3.0F
却可以编译呢。


二、
float s=3.7f;
double x;
x=s;
Console.WriteLine(x);
会得到 3.70000004768372 而不是3.7呢,但s如果等于3.0或3,却又是得到3,而不是3.0000…呢?
...全文
182 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
混_混 2005-08-01
  • 打赏
  • 举报
回复
Thanx
QJ_VXC_QG 2005-07-31
  • 打赏
  • 举报
回复
第二个问题,可参看较厚一点的C#技术书。
sandsboy 2005-07-31
  • 打赏
  • 举报
回复
对于浮点数,如果不加后缀的话默认是double类型,对于整型,默认是int类型。
从double转换到float会造成精度丢失,所以要显示转换才型。
float f=(float)3.0 //编译通过
f=3.0f //编译通过
zhujiechang 2005-07-31
  • 打赏
  • 举报
回复
二、以前我有个同事用PB来编写程序,喜欢用double和float,结果大量运算后总是有1~10的差距,
结果被客户骂得半死,说计算机还没他手算得准。
所以建议使用Decimal这样的类型。
ivorstar 2005-07-31
  • 打赏
  • 举报
回复
To
对于第一个问题我还想问一下,就是为什么写成
 float x1=3
你这样不加F,也可以通过编译呢?

这样是把整形隐式转换为float类型,不损失精度的。

你的第二个问题应该和浮点数的存储有关系。应该是从计算机出生以后就存在了。
hawk234 2005-07-31
  • 打赏
  • 举报
回复
up
混_混 2005-07-31
  • 打赏
  • 举报
回复
对于第一个问题我还想问一下,就是为什么写成
 float x1=3
你这样不加F,也可以通过编译呢?
okyzx 2005-07-31
  • 打赏
  • 举报
回复
转MSDN
默认情况下,赋值运算符右侧的实数被视为 double。因此,应使用后缀 f 或 F 初始化浮点变量,例如:

float x = 3.5F;
如果在以上声明中不使用后缀,则将因为试图将一个 double 值存入 float 变量而得到一个编译错误。
yitiaoming2003 2005-07-31
  • 打赏
  • 举报
回复
1.F是代表float的意思3.0f表示float类型意思。
2.float转double就是不精确的转换。所以后边的尾数都是不精确的。
关于这些搂主不必太计较,多看点将思想的书,笔者些强。
okyzx 2005-07-31
  • 打赏
  • 举报
回复
第二个是float和double精度的问题
okyzx 2005-07-31
  • 打赏
  • 举报
回复
第一个问题:因为你如果要表示是float常量,一定要在后面加一个f或者F,不然就被认为是double
就好像是字符串加""一样

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧