从十进制类型到单类型的转换是缩小转换还是扩大转换?

时间:2019-08-20 20:05:17

标签: c# .net

在Ms Docs的Single结构和Decimal结构文档中,谈到了从Decimal到Single的类型转换,前者表示正在扩大转换,而后者则表示正在缩小转换。哪一个是对的? 而且我不知道在转换为Single类型时如何保留Decimal类型的大小。请解释。

1 个答案:

答案 0 :(得分:3)

严格来说,从十进制转换为单精度既不是缩小也不是扩大。十进制的范围比“单精度”的,但精度的更宽

从十进制转换为单精度将永远不会抛出OverflowException,但可能导致信息丢失。这就是为什么在任何方向都没有隐式转换的原因。

Single的范围是±1.5 x 10 −45 到±3.4 x 10 38 ,而小数位数的范围是±1.0 x 10 −28 至±7.9228 x 10 28 。因此,最小可能的十进制数和最大可能的十进制数都可以放入一个无溢出的Single中。小数的大小将保持不变。

但是,单精度的精度仅为6-9位数(以10为基数),而十进制的精度为28-29位数。因此,如果将小数转换为单数,则第九位之后的任何数字都将丢失。可能会丢失信息,但不会丢失数字的数量。

More Information

您问存储在12个字节中的小数的大小是否可能适合仅4个字节的Single。原因是十进制/浮点数不作为直接转换为二进制的形式存储-部分存储用于量值(如科学格式的“乘以10的幂”),而一部分用于二进制等同于数字本身。