当前位置:  开发笔记 > 编程语言 > 正文

真实与浮动点对金钱

如何解决《真实与浮动点对金钱》经验,为你挑选了3个好方法。

为什么当我将SQL Server中的40.54的值保存到Real类型的列时,它会返回给我一个更像40.53999878999而不是40.54的值?我已经看过几次,但从来没有弄明白为什么会发生这种情况.有没有其他人遇到过这个问题,如果是这样的话?



1> Greg Hewgill..:

看看每个计算机科学家应该知道的浮点运算.

计算机中的浮点数不完全代表小数部分.相反,它们代表二进制分数.大多数小数都没有精确表示为二进制小数,因此有一些舍入.当这样的舍入二进制分数被转换回小数分数时,您将获得您描述的效果.

为了存储货币值,SQL数据库通常提供存储精确十进制数字的DECIMAL类型.这种格式对于计算机来说处理效率稍差,但是当你想避免十进制舍入错误时它非常有用.


实际上,计算机处理速度要快得多*(大约十倍,主要是由于缺乏硬件支持),但对于大多数应用程序来说,缓慢并不重要,因为数字操作远不是瓶颈所在.

2> Javier..:

浮点数使用二进制分数,它们与小数分数不完全对应.

为了钱,最好将分数存储为整数,或者使用十进制数字类型.例如,十进制(8,2)存储8位数,包括2位小数(xxxxxx.xx),即分精度.



3> Sherm Pendle..:

简而言之,这几乎是因为三分之一不能用十进制来精确表达.有关详细信息,请查看David Goldberg的经典论文" 每个计算机科学家应该知道的关于浮点算术的内容 ".

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有