我在浮点数中有值25.00,但当我在屏幕上打印它时,它是25.0000000。 如何显示只有两位小数点后的值?
当前回答
所有答案的问题是,乘法和除法会导致精度问题,因为你使用了除法。这是我很久以前在PDP8上编程时学到的。 解决方法是:
return roundf(number * 100) * .01;
因此,15.6578只返回15.66,而不是15.6578999或类似意外的结果。
你想要的精确程度取决于你自己。只是不要除以乘积,要乘以等量的小数。 不需要搞笑的字符串转换。
其他回答
在Swift语言中,如果你想要显示你需要这样使用它。要在UITextView中赋值double,例如:
let result = 23.954893
resultTextView.text = NSString(format:"%.2f", result)
如果你想在LOG中显示,就像objective-c使用NSLog()一样,那么在Swift语言中你可以这样做:
println(NSString(format:"%.2f", result))
在objective-c中,如果你正在处理常规字符数组(而不是指向NSString的指针),你也可以使用:
printf("%.02f", your_float_var);
OTOH,如果你想把这个值存储在一个char数组中,你可以使用:
sprintf(your_char_ptr, "%.02f", your_float_var);
我根据上面的回答做了一个快速的扩展
extension Float {
func round(decimalPlace:Int)->Float{
let format = NSString(format: "%%.%if", decimalPlace)
let string = NSString(format: format, self)
return Float(atof(string.UTF8String))
}
}
用法:
let floatOne:Float = 3.1415926
let floatTwo:Float = 3.1425934
print(floatOne.round(2) == floatTwo.round(2))
// should be true
如果你也需要浮动值:
NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];
float floatTwoDecimalDigits = atof([formattedNumber UTF8String]);
这不是数字如何存储的问题,而是如何显示它的问题。当将其转换为字符串时,必须四舍五入到所需的精度,在您的示例中是小数点后两位。
例如:
NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];
%.02f告诉格式化程序,您将格式化一个浮点数(%f)和,它应该四舍五入到两个位置,并且应该用0填充。
例如:
%f = 25.000000
%.f = 25
%.02f = 25.00
推荐文章
- 我如何在我的iOS应用程序中每n分钟得到一个后台位置更新?
- 如何显示有两个小数点后的浮点数?
- IEEE 754浮点数不能精确表示的第一个整数是哪一个?
- 如何使用UIVisualEffectView来模糊图像?
- 如何改变时间和时区在iPhone模拟器?
- 格式化XML字符串以打印友好的XML字符串
- 我如何知道何时UITableView完成了ReloadData?
- 复制文本到剪贴板与iOS
- 什么是Swift相当于respondsToSelector?
- 用于双值的assertEquals的delta或epsilon参数的含义
- 如何检查NSString是否以某个字符开始
- 尝试将一个非属性列表对象设置为NSUserDefaults
- 对于实例消息,接收方类型***是转发声明
- 如果模态ViewController演示样式为UIModalPresentationFormSheet, iPad键盘将不会解散
- Xcode - ld:没有为- lpods找到库