回答
Floats具有非常低的精度高(3十亿+)号。
浮球的精度在0-1范围内是最好的。你从零开始越远,精度就越低。在30亿左右,它不足以保存每一个整数(所以它可以代表最接近的值)。
解决方案:使用double(或decimal representation)。
各种浮点类型表示的准确性因其大小而异。对于32位浮点数,您可以期望大约7位数的精度。对于双数是大约16位数字。
我强烈建议阅读浮点表示和各种优缺点。从长远来看,它会为您节省很多麻烦,特别是当比较之类的事情不像您期望的那样有效时。
32位浮点数为23位,尾数为8,388,608个不同的值。这意味着精确度大约是7位十进制数字。您的电话号码有8位十进制有效数字,因此您会看到最后一位有效数字中的精度损失。
Here's More information on float representation
双精度是64位,并具有52比特用于其是4,503,599,627,370,496(16位号码)的尾数,并因此具有大致15-16十进制数字的准确性。
A decimal
类型是可能允许您以任何准确度保存任何数量的任意长度的东西。 C#拥有它们,但不幸的是,它们不是C++中的原始类型。你也许可以找到一些第三方库,用C++实现它们。
实际上,由于隐藏位,它是24位:标准化数字为1,非标准化数字为0。 – fredoverflow 2011-02-16 09:55:56
浮点算术已经声称另一个受害者!它似乎被它咬了一口,对每一个程序员来说都是一些礼仪。 :) – 2011-02-16 09:49:55
- 1. 铸造目的-1到uint32?
- 2. 铸造价值浮动返回零
- 3. 铸造指针浮动
- 4. 铸造为int和浮点错误?
- 5. 无法做铸造
- 6. 错误值铸造float时(24)值浮动(53)在SQL 2005
- 7. 铸造盒装值
- 8. 为什么“-1”不能减1?
- 9. 的QlikView - 减1年
- 10. 日期减1年?
- 11. (浮动)铸造不起作用
- 12. 线程1个信号SIGABRT碰撞铸造的UIView到SKView
- 13. 浮动值浇铸到char
- 14. 如何区分1和零浮点值?
- 15. 递增和递减1个值 - 按钮
- 16. 获取元素值,然后减1?
- 17. 铸造int或浮动取决于is_integer
- 18. 铸造int作为浮点数
- 19. 隐式铸造浮动常数
- 20. 柱铸造语法
- 21. 在红宝石减法不小于1
- 22. 铸造int浮动导致非法指令
- 23. 铸造浮到字符串没有科学记数法
- 24. 铸造值SQL IN功能
- 25. SpringBoot:EL1003E属性值铸造
- 26. 铸造textfield值加倍
- 27. 如何生成具有值1/1/11的轴1/1/12 1/1/13
- 28. SHA-1摘要缩减
- 29. 如何“一列表减1”?
- 30. MySQL:自动增量减1?
的OP的数量只有约33亿美元。 – Mephane 2011-02-16 09:40:43