有人可以告诉我如何将浮点数的精度设置为期望的长度。说我有一个数字2504.6。正如你所看到的,这里的精度只有1.我想将它设置为6.我需要这个,因为我将该值与从 [txtInput.text floatValue]获得的值进行比较。即使我在文本框中输入2504.6,它也会增加5个精度,并且会达到2504.600098。当我比较这两个值时,它们看起来不相等。Objective-C - 如何提高浮点数的精度
回答
可以使用NSDecimalNumber
比较数字:
NSDecimalNumber *number = [NSDecimalNumber numberWithFloat:2504.6f];
NSDecimalNumber *input = [NSDecimalNumber decimalNumberWithString:txtInput.text];
NSComparisonResult result = [number compare:input];
if (result == NSOrderedAscending) {
// number < input
} else if (result == NSOrderedDescending) {
// number > input
} else {
// number == input
}
花车近似。存储浮动的方式不允许任意的精度。浮点数(和双精度)设计用于存储非常大(或小)的值,但不是精确的值。
如果您需要非常精确的非整数,请使用int(或long)并对其进行缩放。你甚至可以编写自己的对象类来处理它。
他们将不会出现等于
顺便说一下这个问题已经被问过
Comparing float and double data types in objective C
一个长只能给你3个十进制数字比2倍更精确。 – 2012-02-26 17:55:56
@Oli但不会有近似值。 – Sulthan 2012-02-26 18:03:37
@Sulthan:定义“逼近”。 float **是一个具有相关缩放因子的整数。 – 2012-02-26 18:05:06
比较两个浮点型变量A和B使用'平等'运营商不是很好的主意,导致浮动数量有限cision。比较浮动的最好办法是
fabs(A - B) < eps
,其中每股收益为一些很小的值,即0.0001
如果您与代表浮点值,你可以只是比较字符串,而不是数字的字符串操作。
只有当OP不需要比较结果是*正确*(我的意思是没有近似值),如果用户实际输入2504.600098,这才起作用。 – sch 2012-02-26 18:08:53
- 1. 高精度打印结果(浮点数)
- 2. 范围缩减精度不高的单精度浮点数
- 3. 浮点精度
- 4. 双精度和单精度浮点数?
- 5. 双精度浮点数如何转换为单精度浮点格式?
- 6. C++浮点精度
- 7. 与浮点精度
- 8. haskell浮点精度
- 9. XMLSerialization浮点精度
- 10. 如何修复QNX的浮点精度?
- 11. 浮点数的数字精度分布
- 12. python中的浮点精度
- 13. 如何浮点精度设置工作
- 14. 如何设置浮点精度
- 15. 浮点数和高度
- 16. 单精度大端浮点值到Python浮点数(双精度,大端)
- 17. c中的浮点数和双精度#
- 18. 指定浮点数精度的NSString
- 19. 任意精度JavaScript上的浮点数
- 20. python中精度浮点数的丢失
- 21. Python数组中的浮点精度
- 22. 标准双精度IEEE浮点数有多少位的精度?
- 23. 如何从QVariant中提取单精度浮点数的二维数组?
- 24. 使用boost lib更高精度的浮点数(高于16位数)
- 25. 更改浮点型精度
- 26. 本征浮点精度
- 27. MongoDB浮点值精度?
- 28. 限制浮点精度?
- 29. 管理浮点精度
- 30. NumPy在浮点运算中将精度降低到更高的精度
你试过'double'? – 2012-02-26 17:50:39
不是我没有,会不会很重要?我的意思是,不是双倍大于浮动的两倍?我的意思是精确度。 – 2012-02-26 19:15:15
'double'给你提供了大约两倍的精度。 – 2012-02-26 19:18:53