C#中float、double、 decimal的区别(希望举例说明哈)

nanfeng_shy 2010-06-12 06:05:26
网上查阅了很多资料,但感觉没有说清楚,请各位帮助!

例如:
using System;
class e1{
public static void Main()
{
float xyz;
xyz=(float)123.456;
Console.WriteLine("xyz:{0}",xyz);
}
}

为什么不能直接写xyz=123.456,而需要强制性转化,不然就要抛出异常。
本人在想难道float类型的精度不止小数位3位的嘛。。。。
PS:
本人初学C#,希望大家不要笑话,我知道很简单。
...全文
1065 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
spmzfz 2010-06-13
  • 打赏
  • 举报
回复
我 这是VS2010 ,若直接写代码,它会提示出错:
错误 1 不能隐式地将 Double 类型转换为“float”类型;请使用“F”后缀创建此类型

float xyz;
xyz=(float)123.456;

错误提示都已经说明原因了。
你可以这样:
float xyz;
xyz = 123.456F;
Console.WriteLine("xyz:{0}", xyz);
spmzfz 2010-06-13
  • 打赏
  • 举报
回复
OOAmyOO 2010-06-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 microtry 的回复:]
呵呵,楼主,本菜鸟直接回答你:
一个类似123.456这样的常数默认是double双精度,
一个float数据类型则表示single单精度,
一个双精度的变量是不能被隐式转换成单精度变量的
[/Quote]
顶哈
缪军 2010-06-12
  • 打赏
  • 举报
回复
你既然知道float,double,decimal的精度是递进的,
就应该能推导出8楼的结论
缪军 2010-06-12
  • 打赏
  • 举报
回复
呵呵,楼主,本菜鸟直接回答你:
一个类似123.456这样的常数默认是double双精度,
一个float数据类型则表示single单精度,
一个双精度的变量是不能被隐式转换成单精度变量的
捷哥1999 2010-06-12
  • 打赏
  • 举报
回复
float f = 123.456f;
这样就可以了!
nanfeng_shy 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mngzilin 的回复:]
精度依次提高
[/Quote]
我知道精度会依次提高,但是为什么123.456就不能直接赋值给float的类型啊,必须强制转化呢?
nanfeng_shy 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jhc1999 的回复:]
建议百度
[/Quote]
我第一反应就是百度哈,但是还是没有弄清楚哈
mngzilin 2010-06-12
  • 打赏
  • 举报
回复
精度依次提高
wuyq11 2010-06-12
  • 打赏
  • 举报
回复
Decimal 值类型适用于要求使用大量有效的整数及小数位数并且没有舍入错误计算
Decimal 类型不会消除对舍入的需要,而是将因舍入而导致的错误降到最少
从 Decimal 到 Single 或 Double 的转换属于收缩转换,可能会丢失精度
盜令玊 2010-06-12
  • 打赏
  • 举报
回复

xyz=123.456f;
飞扬人生 2010-06-12
  • 打赏
  • 举报
回复
建议百度

111,131

社区成员

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

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

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