最近在将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位)
————————————————
版权声明:本文为CSDN博主「wf_wenli」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wf_wenli/article/details/8820555
相关文章
- 09-06C#中的int、long、float、double等类型都占多少个字节的内存?
- 09-06C#中decimal,double和float的区别
- 09-06JAVA 各种数值类型最大值和最小值 Int, short, char, long, float,&nbs
- 09-06C# int uint long ulong byte sbyte float double decimal 范围,及类型!
- 09-06C#中decimal ,double,float的区别
- 09-06[转载] c#中decimal ,double,float的区别
- 09-06C#中int、long、float、double、decimal最大值最小值
- 09-06C/C++中各种类型int、long、double、char表示范围(最大最小值)