我有一个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?
提前致谢。