比较两个double或两个float值的最有效方法是什么?
简单地这样做是不正确的:
bool CompareDoubles1 (double A, double B)
{
return A == B;
}
Run Code Online (Sandbox Code Playgroud)
但是像这样:
bool CompareDoubles2 (double A, double B)
{
diff = A - B;
return (diff < EPSILON) && (-diff < EPSILON);
}
Run Code Online (Sandbox Code Playgroud)
似乎浪费处理.
有谁知道更聪明的浮动比较器?
我在mysql表中有这个:

id并且bolag_id是int.lat并且lngitude是double.
如果我使用该lngitude列,则不返回任何结果:
lngitude查询: SELECT * FROM location_forslag WHERE lngitude= 13.8461208
但是,如果我使用该lat列,它会返回结果:
lat查询: SELECT * FROM location_forslag WHERE lat= 58.3902782
该lngitude栏有什么问题?
我正在规范化数据库,其中一部分涉及将列从一个表转换FLOAT为a DECIMAL(28,18).然后,当我尝试将此已转换的列连接回源列时,在某些情况下它不会返回任何结果.
它似乎与它转变的方式有关.例如, FLOAT转换为a DECIMAL(28,18)产生:
51.051643260000006000
Run Code Online (Sandbox Code Playgroud)
原来FLOAT是
51.05164326
Run Code Online (Sandbox Code Playgroud)
我尝试了各种修改方法FLOAT,但这些方法都没有:
CAST(51.05164326 AS DECIMAL(28,18)) = 51.051643260000000000
STR(51.05164326 , 28,18) = 51.0516432599999990
Run Code Online (Sandbox Code Playgroud)
转换的原因是由于提高了这些字段的准确性.
有没有人有一个一致的策略来转换这些数字,并能够确保后续的连接工作?
提前致谢
厘米