我有这个mysql列:
points_on | points_off
0 1.36
这个SQL命令:
UPDATE table SET points_off = points_off-{$cash}, points_on = points_on+{$cash} WHERE ...
$ cash =“1.36”
如果我运行它,表更新错误如下:
points_on | points_off
1.36 0.0000000143051
如何正确更新?
我需要将 $ cash 号码从points_off移至points_on。
答案 0 :(得分:3)
MySQL字段类型是float
还是double
?
根据http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html,问题是float
值近似存储。
您应该使用decimal
,定义为decimal(M,D)
,其中M
是数字中的最大位数(例如,对于0.00到9.99,M = 3
),并且D
是该点之后的位数(例如,对于0.00到9.99,D = 2
)。
我执行了您尝试的相同操作,遇到了同样的问题,并使用decimal
进行了修复。
请注意,decimal
字段比float
需要更多的存储空间。
答案 1 :(得分:0)
declare @cash float
set @cash=1.36
update [dbo].[stkkk] set [pts_on]=[pts_on]+@cash
update [dbo].[stkkk] set [pts_off]=[pts_off]-@cash
答案 2 :(得分:0)
我认为这源于PHP内部代表数字的方式。据我所知,PHP将数字存储为浮点小数,这可能会产生奇怪的输出,例如你的。
我建议阅读以下StackOverflow文章:
不确定它是否可以100%工作,但您可能想尝试实现一些代码,以确保您的数学运算精确到两位小数,而不是让PHP决定。参考文章可能会有所帮助。