C# 从十进制类型到单一类型的转换是缩小转换还是扩大转换?
在Ms Docs的Single struct和Decimal struct文档中,提到了从Decimal到Single的类型转换,前者说它在扩大转换,后者说它在缩小转换。哪一个是对的?C# 从十进制类型到单一类型的转换是缩小转换还是扩大转换?,c#,.net,C#,.net,在Ms Docs的Single struct和Decimal struct文档中,提到了从Decimal到Single的类型转换,前者说它在扩大转换,后者说它在缩小转换。哪一个是对的? 我不知道当转换为单一类型时,十进制类型的大小是如何保持的。请解释。严格来说,从十进制到单数的转换既不是缩小也不是扩大。小数的范围比单个小数的范围窄,但精度更高 从十进制到单数的转换不会引发溢出异常,但会导致信息丢失。这就是为什么在两个方向上都没有隐式转换 单个传感器的范围为±1.5 x 10−45至±3.4 x
我不知道当转换为单一类型时,十进制类型的大小是如何保持的。请解释。严格来说,从十进制到单数的转换既不是缩小也不是扩大。小数的范围比单个小数的范围窄,但精度更高 从十进制到单数的转换不会引发
溢出异常
,但会导致信息丢失。这就是为什么在两个方向上都没有隐式转换
单个传感器的范围为±1.5 x 10−45至±3.4 x 1038,而十进制范围为±1.0 x 10−28至±7.9228 x 1028。因此,最小可能的十进制数和最大可能的十进制数都可以放入一个单独的十进制数中,而不会出现溢出。小数点的大小将保持不变
然而,与十进制中的28-29位相比,单个数字的精度仅为6-9位(以10为基数)。所以,如果你把一个十进制数转换成一个单数,第六个和第九个后面的任何数字都会丢失。可能会丢失信息,但不会丢失数量的大小
您会问,存储在12个字节中的十进制数的大小如何可能只适合4个字节中的一个字节。原因是十进制/浮点数不是以直接转换为二进制的形式存储的——存储的一部分用于大小(如科学格式中的“乘以10的幂”)“部分”用于数字本身的二进制等价物。请添加一个指向您正在讨论的文档的链接。大小将被保留,但精度不会让我担心,以下是分别讨论单和十进制类型的链接。Single:Decimal:据我所知,Decimal类型比Single类型有更大的存储空间,所以起初我认为将Decimal类型的值强制转换并赋给Single类型变量也会影响它的大小。但是,正如您所说,如果您试图打印出隐藏的其余数据,似乎保留了大小,因为使用更大的数据类型(如Double)的单个数据类型的精度有限。这让我很困惑。通过将十进制值分配给较小的单一类型变量,我认为在这个过程中,原始震级的一部分应该被截断或以某种方式受到影响,但尽管单一类型的大小较小,震级仍然被保留,这怎么可能呢?我会在我的回答中添加更多的细节来帮助你。非常感谢你的详细回答,它帮助了很多。