我在SQL Server 2012中有一个表。其中一个列是十进制(18,2),用于存储简单的财务数据。
在ASP Net程序中,检索行并基于某些逻辑,添加一些行(使用double类型的变量)。根据结果,执行一个逻辑,其中使用不同的循环:如果结果等于,大于或小于另一个变量。
问题在于,在某些情况下(并没有特别指出这些情况),结果是xxx.00000000000000000000000000000xxxx。 (意思是在第十亿个地方,有一些数字)。当另一个变量(用于进行比较)是xxx时,这会强制逻辑进入不同的循环。
仅在某些情况下发生,但不确定是什么导致它发生。目前,我已将Math.round
添加到2位小数。但是,在每个地方进行这种改变将是一种负担。
任何想法是什么导致了这种行为?
答案 0 :(得分:1)
浮点数据类型(例如.NET double,SQL Server float)是近似值,因为某些值无法完全根据IEEE标准存储。如果需要精确的十进制值,请在.NET代码中使用Decimal。