【问题标题】:Convert implicitly decimal to double or double to decimal [duplicate]将十进制隐式转换为双精度或双精度为十进制[重复]
【发布时间】:2013-08-11 17:49:16
【问题描述】:

双精度为:15-16 位。

小数精度为:28-29 个有效数字。

所以我们可以隐式地将十进制转换为双精度。但是考虑一下这段代码:

double x = 100.3;
decimal y = 10.2;
 x = y;
 y = x;

x=yy=x 都有编译时错误。

为什么我们不能隐式地将十进制转换为双精度或双精度为十进制?

请阅读:double to decimal and decimal to double

【问题讨论】:

  • @MartinSmith 请再读一遍我的问题
  • @MartinSmith 他还谈到了doubledecimal
  • 您阅读那里的答案了吗?它解决了你的问题吗?
  • @ShahroozJefriㇱ Jon Skeet 的回答就是您问题的答案。小数的精度要高得多,但范围要低得多。这会导致双向数据丢失。

标签: c#


【解决方案1】:

这两种类型的想法完全不同。 请参阅 Eric Lippert 的 blog

编辑:

博客引用: “由于范围差异,不可能有从双精度数到十进制数的隐式转换;大量双精度数大于可能的最大小数,因此隐式转换要么必须抛出,要么默默地丢失可能大量的数量,两者都是不可接受的。可能存在从十进制到双精度的隐式转换,因为这只会失去精度,而不是幅度。

【讨论】:

  • 不鼓励仅链接答案。
  • @It'sNotALie。在这种情况下我还能做什么?复制链接的优秀博客的内容更好吗?
  • @AlexSiepman:如果可能,您可以引用链接的相关部分。这也可以避免Link rot 问题。
  • @It'sNotALie。好的,这是一个不错的选择。
【解决方案2】:

因为虽然decimal的精度更高,但double的范围更大。

doubles 从-1.79769313486232E+308 变为1.79769313486232E+308。同时,decimals 从-7922816251426433759354395033579228162514264337593543950335。有一个巨大的差异。但是,您通常不想从 decimal 转换为 double,因为当您使用 decimal 时,您通常不想丢失精度(因为它们通常用于银行业务,需要 准确)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 2011-07-31
    • 1970-01-01
    • 2015-06-14
    相关资源
    最近更新 更多