【发布时间】:2019-08-20 20:05:17
【问题描述】:
在 Ms Docs 的 Single struct 和 Decimal struct 文档中,关于从 Decimal 到 Single 的类型转换,前者说它正在扩大转换,而后者说它正在缩小转换。哪一个是对的? 而且我不明白在转换为 Single 类型时如何保留 Decimal 类型的大小。请解释一下。
【问题讨论】:
在 Ms Docs 的 Single struct 和 Decimal struct 文档中,关于从 Decimal 到 Single 的类型转换,前者说它正在扩大转换,而后者说它正在缩小转换。哪一个是对的? 而且我不明白在转换为 Single 类型时如何保留 Decimal 类型的大小。请解释一下。
【问题讨论】:
严格来说,从 Decimal 到 Single 的转换既不是缩小也不是扩大。 Decimal 的范围比 Single 的范围更窄,但它的精度更宽。
从 Decimal 到 Single 的转换永远不会抛出 OverflowException,但它会导致信息丢失。这就是为什么在任一方向都没有隐式转换。
Single 的范围为 ±1.5 x 10−45 到 ±3.4 x 1038,而 Decimal 的范围为 ±1.0 x 10 −28 至 ±7.9228 x 1028。因此,尽可能小的 Decimal 和尽可能大的 Decimal 都可以放入 Single 而不会溢出。小数的大小将保持不变。
但是,Single 的精度仅为 6-9 位(以 10 为基数),而 Decimal 的精度为 28-29 位。因此,如果将 Decimal 转换为 Single,则第 6-9 位之后的任何数字都将丢失。可能会丢失信息,但不会丢失数量的大小。
您问存储在 12 个字节中的 Decimal 的大小怎么可能适合只有 4 个字节的 Single。原因是十进制/浮点数不存储为直接转换为二进制 - 存储的一部分用于幅度(如科学格式中的“10 次方”),一部分用于二进制相当于数字本身。
【讨论】: