[英]Large numbers rounding off [c#]
我在这里有一些奇怪的问题。 我有一个数据库表,其中存储了巨大的值。 我的应用程序(C#)正在读取此值并保持双精度类型。 此应用程序将相同的值插入另一个表。 注意:我没有对从第一个表读取的值进行任何计算/处理。 它只是用于更新第二个表。
这里的问题是,第二个表的值与第一个表的值略有不同。 当我保持双重类型时,看起来数字正在四舍五入。
这是一个值的例子。
原始值: 18014398509481984
复制到新表的值: 18014398509482000
值看起来不同,但实际上两者都是相同的。 我用18014398509481984 - 18014398509482000作为搜索词进行了谷歌搜索,它返回结果0 ,这意味着两者都是相同的。
问题 :
1 - 如果两者相同,为什么第二个值看起来不同? 我可以看到1984年变成了2000年 。
2 - 为什么要进行转换?
3 - 如何避免此类转换?
任何帮助都会很棒!
尝试使用System.Decimal
存储第一个表中的值,而不是System.Double
。 System.Double
似乎没有足够的有效数字来准确地存储那么大的值。
我相信这是由于浮点精度(大数将使用尾数指数),这意味着它基本上表示为具有幂的派系数。 然而,由于浮点运算,小数会遇到舍入误差。
通常,绕过这一点的方法是避免浮点值(尝试Int64),使用更精确的类型(十进制)或说明错误并执行'大约等于'。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.