Q
奇怪的类型转换
2
A
回答
5
这里有两个问题。首先是浮点值不是小数,所以3.8f
真的更像3.79999999999999999999923
或类似的东西。第二个是当转换为int时,系统将总是截断小数值,而不是四舍五入。
所以,如果你能窥视处理器,你会看到它做
3.79999999999999999999923 * 5 = 18.999999999999999999615
然后你删除非整数部分:
18
3
您正在运行到IEEE 754种限制。 f
不是恰好是3.8
,它只是稍微少一点。
1
将整数和浮点数相乘时,如果没有明确地将一个转换为另一个,则依赖于用于为您进行四舍五入的语言的隐式转换规则。有些语言会截断小数点,而有些语言会舍入十进制值以产生整数。在将两种数字类型相乘的情况下,如果您不知道该期待什么,则最好明确地施放和循环,以便确切知道所得到的结果。
相关问题
- 1. 奇怪的类型转换错误
- 2. 位移导致奇怪类型转换
- 3. 类型参数化和奇怪的转换异常
- 4. PHP:奇怪的类型转换和舍入
- 5. 奇怪的类型转换,同时做variableOfTypeA + = variableOfTypeB
- 6. 奇怪的编码类型转换为UTF-8
- 7. 奇怪的转换异常
- 8. C++迭代器 - 奇怪的转换
- 9. CSS转换制作奇怪的效果?
- 10. Java奇怪的细胞转换
- 11. 奇怪格子的CSS转换
- 12. 奇怪的行为转换日期
- 13. 将奇怪的std :: string转换为NSString
- 14. Swift:奇怪的向下转换失败
- 15. 奇怪的utf8转换问题在php
- 16. iOS 11 prefersLargeTitles奇怪的转换
- 17. 奇怪的转换表达式
- 18. SQL Server SqlClient奇怪的转换异常
- 19. OpenGL矩阵奇怪的转换
- 20. 使用区域设置小数点和类型转换的奇怪行为
- 21. CSS奇怪的行为类型的nth
- 22. 转换freetype上的字形时出现奇怪的转换
- 23. 变换奇怪
- 24. 奇怪`freer`类型的错误
- 25. C++中奇怪的类型不匹配
- 26. drupal中的奇怪内容类型
- 27. 类型铸造的奇怪行为
- 28. 奇怪的JavaScript类型铸造
- 29. 这种奇怪的类型[T *]
- 30. 奇怪的JavaScript/PHP变量类型
使用细胞,地板或圆形操作之一;将类型转换为整数会导致浮点数的截断(在大多数计算机语言中)。 – 2010-10-25 16:41:56
说出你正在使用的是什么编程语言,而不是让人猜测,这是一种很好的形式。 – 2010-10-25 16:46:50
哦,来吧,Pascal,它很明显是C ...或者C++ ...或者Java ...或者C#...或者什么的。 ;-) – StriplingWarrior 2010-10-25 17:20:24