我正在开发一个传统的ASP应用程序。我试图将值(40.33)插入到SQL Server 2000中恰好是浮点类型的字段中。我在应用程序中看到的每个地方(通过一些日志记录)都会向存储过程发送40.33。当我在调用时对数据库运行SQL事件探查器时,我在跟踪中看到的值是4.033000183105469e + 001

所有额外的垃圾来自哪里(183105469)?

为什么当我通过40或40.25时没有额外的东西?

这只是使用float的奇怪副作用之一吗?当我写一些东西时,我通常使用金钱或小数或其他东西,所以不熟悉float数据类型。

有帮助吗?

解决方案

是的,这很奇怪,虽然众所周知,但使用的副作用FLOAT。

在Microsoft SQL Server中,您应该使用精确的数值数据类型,例如 NUMERIC,DECIMAL MONEY或SMALLMONEY 如果您需要具有比例尺的精确数字。

不要使用FLOAT。

其他提示

我认为这可能只是一个精确问题 - 数字的0.33部分无法用二进制表示 - 这可能是你可以达到的最接近的部分。

问题是花车不是100%准确。如果您需要准确的数字(特别是在处理货币值时)......您应该使用十进制类型。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top