C# 浮点数到小数点,小数点到浮点数。一般而言,所有转换
我在学习C。我完全不知道为什么,这里的正确答案是什么。我找了很多,什么也没找到。人们解释,但却找不到解释。正确答案是什么?为什么 在以下哪种转换过程中可能会出现精度损失C# 浮点数到小数点,小数点到浮点数。一般而言,所有转换,c#,type-conversion,C#,Type Conversion,我在学习C。我完全不知道为什么,这里的正确答案是什么。我找了很多,什么也没找到。人们解释,但却找不到解释。正确答案是什么?为什么 在以下哪种转换过程中可能会出现精度损失 a。将整型转换为浮点型 b。将浮点转换为长浮点 c。将long转换为int d。将整型转换为长型 e。将浮点转换为十进制 f。将十进制转换为浮点 为什么浮点到十进制和十进制到浮点都可能丢失精度转换 在以下哪种转换过程中可能会出现精度损失? A.将整型转换为浮点型 int具有32位精度,完全用于数字的非小数部分float具有3
- a。将整型转换为浮点型
- b。将浮点转换为长浮点
- c。将long转换为int
- d。将整型转换为长型
- e。将浮点转换为十进制
- f。将十进制转换为浮点
A.将整型转换为浮点型
int
具有32位精度,完全用于数字的非小数部分float
具有32位精度,但其中一些位用于指数,剩下的不到32位表示尾数。因此,有些数字可以表示为int
,但不能表示为float
例如:
int i = int.MaxValue; // = 2147483647
float f = (float)i; // = 2147484000 --> lost last three digits!
float f = 1f / 3;
decimal d = 1M / 3;
float f2 = (float)d;
b。将浮点转换为长浮点
我希望您可以很容易地了解从浮点类型到整数类型的转换是如何失去精度的
c。将long转换为int你的书没有提到这是一个问题,这表明它区分了精度损失和精度损失(仅供参考) 在C#中,
long
是64位,而int
只有32位。任何大于int.MaxValue
(即2147483647
)的数字都不能用int
表示,但许多这样的数字可以用long
表示。将任何此类数字从long
转换为int
将导致精度损失,即所得数字甚至不接近正确数字
可以说,它也失去了精确性,但我猜你的书关注的是只失去精确性的情况
d。将整型转换为长型我想你明白为什么这不会失去精确性 e。将浮点转换为十进制
F将十进制转换为浮点
为什么浮点到十进制和十进制到浮点都可能丢失精度转换
decimal
到float
更容易解释:我们甚至在第一位使用decimal
的原因是因为普通的float
数值类型不能简单地表示decimal
可以表示的某些值,这些值对于常见类型的计算(例如货币计算)很重要,而对于其他值decimal
也不能表示,它至少可以更接近地表示它们
例如:
int i = int.MaxValue; // = 2147483647
float f = (float)i; // = 2147484000 --> lost last three digits!
float f = 1f / 3;
decimal d = 1M / 3;
float f2 = (float)d;
在上面,变量f
的值为0.3333333 43
,而变量d
的值为0.3333
。两者都不精确(因为1/3是一个重复的十进制,它不能用有限的计算机来表示),但是十进制版本更接近正确答案
同样,从decimal
转换回float
会导致精度损失,因为变量f2
的值与f
的值相同:0.3333333 43
但是从浮点
到十进制
的转换呢
好的,decimal
比float
具有更高的精度有效位数(大约28对7),而float
类型支持的数字大小为1.401298E-45
(即float.Epsilon
)。但是,decimal
不能表示大小如此之小的数字(它只能表示大小大约为1E-28
)。将浮点
数值转换为小于十进制
所能表示数值的数值,将导致数值0
,丢失那些有效的十进制数字
换句话说:float
只有7位精度,decimal
有28位精度,float
可以比decimal
更进一步地将这些数字移到小数点的右边,允许float
中的数值小于decimal
所能代表的数值
因此,无论哪种方式都有可能失去精度(这就是为什么C#中没有这些类型之间的隐式转换……它只在不丢失信息的情况下提供隐式转换)
另请参见:
但是长到整数会以什么方式导致精度损失呢?当你提到“丢失精度”时,你实际上指的是潜在的损失,考虑长值<代码> 12345 67 8900L < /代码>。在int
中是多少?-55什么,什么。书上说ABEF是正确的答案。为什么?写得很漂亮。我祝你一切顺利,非常感谢你的解释。我一定会检查这些链接以及。