C++中double类型赋值精确性的问题

今天写代码时想用int((degree-minute)*60-int(degree-minute)*60)得出度分秒的值,可是没想到输出的却不是自己想要的结果,比如int((23.4-23)*60)的值因该是24才对,可是输出却是23,我以为可能是编译器的问题吧(我用的g++),于是我又去vs里年尝试了一下,发现也是23,正当我迷惑时,发现在vs里(23.4-23)*60的值不是0.4,而是0.3999999999,原来是C++中double类型的值的问题,于是我去百度发现double类型的值会有精度丢失。原来C++中所有的数字都是二进制储存的,在二进制转换回到十进制时就会出现精度丢失。具体的原因参考浮点精度运算不准确的原因Double-precision floating-point format

关于浮点数精度问题还有个小故事:1991年2月25日,一杖伊拉克飞毛腿导弹击中了沙特阿拉伯载赫蓝的一个军营,杀死了美国陆军第十四军需分队的28名士兵。政府调查指出该次失败归咎于导弹系统时钟内的一个软件错误。在此之前,爱国者导弹连在载赫蓝已经连续工作了100小时。至此,导弹的时钟已经偏差了三分之一秒,相等于600米的距离误差。

-------------本文结束感谢您的阅读-------------