我正在开发一个传统的ASP应用程序。我试图将值(40.33)插入到SQL Server 2000中恰好是浮点类型的字段中。我在应用程序中看到的每个地方(通过一些日志记录)都会向存储过程发送40.33。当我在调用时对数据库运行SQL事件探查器时,我在跟踪中看到的值是4.033000183105469e + 001
所有额外的垃圾来自哪里(183105469)?
为什么当我通过40或40.25时没有额外的东西?
这只是使用float的奇怪副作用之一吗?当我写一些东西时,我通常使用金钱或小数或其他东西,所以不熟悉float数据类型。
答案 0 :(得分:8)
是的,这是使用FLOAT的一个奇怪的,虽然well-known的副作用。
在Microsoft SQL Server中,如果需要具有缩放比例的精确数字,则应使用精确的数值数据类型,例如NUMERIC, DECIMAL,MONEY or SMALLMONEY。
不要使用FLOAT。
答案 1 :(得分:0)
我认为这可能只是一个精确问题 - 数字的0.33部分无法用二进制表示 - 这可能是你可以达到的最接近的部分。
答案 2 :(得分:0)
问题是花车不是100%准确。如果您需要准确的数字(特别是在处理货币值时)......您应该使用十进制类型。