LINQ to SQL浮点舍入问题

时间:2015-03-23 18:04:50

标签: c# sql-server linq-to-sql floating-point-precision

我有一个LINQ语句,其中包含一些'let和一些计算列。我得到一些舍入问题,我肯定是由于精度或浮点数学,我希望得到解释。

为了解决问题,我首先将所有内容转换为十进制,然后在最后一步中,将小数转换回双精度(在完成舍入后)以消除客户端不想要的“精度”小数。所以我现在'功能'。

这是一个用于说明问题的transact sql语句(285022.355是我之前计算的表达式和let语句的值):

select 285022.355 [Value From Previous Calculations],
        convert(float, 285022.355) [Simple Convert OK],
        round( 285022.355, 2 ) [Simple Round Works],
        round( convert(float, 285022.355), 2 ) [Simple Convert Round Does Not Work]

产生以下结果:

先前计算的价值:285022.355
简单转换OK:285022.355
简单的圆形工程:285022.360
简单转换回合不起作用:285022.35

我希望285022.355能够四舍五入到285022.36而且由于我对“浮点数学问题”的了解有限,我认为它总是像N.00000000001(最后有一个'点1'浮动方式可能导致四舍五入UP问题)。如何将'285022.355'转换为浮点数并将其舍入为2位小数舍入为DOWN为285022.35?

提前致谢。

0 个答案:

没有答案