C#中int、long、float、double、decimal最大值最小值
最近在将java上写的一个简单的表达式求值计算器移植到Windows Phone 8,java中double的精度问题是很明显的,解决办法是改用BigDecimal类。所以觉得C#中用double也是不太好的。
C#中用作精度计算的一个数据类型是decimal,对应的类是Decimal
decimal的表示范围是
(-7.9 x 1028 - 7.9 x 1028) / (100 - 28)
(详见http://technet.microsoft.com/zh-cn/364x0z75.aspx)
显而易见,decimal能表示的最大数比double要小得多,
经查询一下是各数据类型能表示的最大值和最小值:
int类型的最大值: 2147483647,最小值: -2147483648
uint类型的最大值: 4294967295,最小值: 0
byte类型的最大值: 255,最小值: 0
sbyte类型的最大值: 127,最小值: -128
short类型的最大值: 32767,最小值: -32768
ushort类型的最大值: 65535,最小值: 0
long类型的最大值: 9223372036854775807,最小值: -9223372036854775808
ulong类型的最大值: 18446744073709551615,最小值: 0
float类型的最大值: 3.402823E+38,最小值: -3.402823E+38
double类型的最大值: 1.79769313486232E+308,最小值: -1.79769313486232E+308
decimal类型的最大值: 79228162514264337593543950335,最小值: -79228162514264337593543950335
下面的代码说明了double和decimal表达精度能力的不同:
static void Main(string[] args)
{
String str1 = Console.ReadLine();
String str2 = Console.ReadLine();
double i = double.Parse(str1);
double j = double.Parse(str2);
Console.WriteLine("i * j = " + i * j);
decimal k = decimal.Parse(str1);
decimal l = decimal.Parse(str2);
Console.WriteLine("k * l = " + k * l);
}
输入:
0.333333333333333333333333333333333333333333
3
运行结果:
1
0.9999999999999999999999999999 (小数点后28位)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)