如何将double类型转换为字符串:
1.4324 => "1.43"
9.4000 => "9.4"
43.000 => "43"
即我想保留小数点后两位,但不要任何尾随的零,也就是说我不想要
9.4 => "9.40" (wrong)
43.000 => "43.00" (wrong)
所以我现在的代码不能正常工作,因为它显示了过多的零:
[NSString stringWithFormat: @"%.2f", total]
如何将double类型转换为字符串:
1.4324 => "1.43"
9.4000 => "9.4"
43.000 => "43"
即我想保留小数点后两位,但不要任何尾随的零,也就是说我不想要
9.4 => "9.40" (wrong)
43.000 => "43.00" (wrong)
所以我现在的代码不能正常工作,因为它显示了过多的零:
[NSString stringWithFormat: @"%.2f", total]
您犯了一个简单的错误。这样会行:
[NSString stringWithFormat: @"%.2lf", total]
最简单的方法可能是自己开发一个函数。我曾经在C语言中这样做过,因为使用printf
格式化无法得到所需行为。
在Objective-C中也似乎没有更简单的方法。你可以尝试以下代码:
NSString *ftotal = [NSString stringWithFormat: @"%.2f", total];
while ([ftotal hasSuffix:@"0"]) {
ftotal = [ftotal subStringToIndex [ftotal length]-1];
}
if ([ftotal hasSuffix:@"."]) {
ftotal = [ftotal subStringToIndex [ftotal length]-1];
}
NSString *ftotal = [NSString stringWithFormat: @"%.2f", total];
if ([ftotal hasSuffix:@".00"]) {
ftotal = [ftotal subStringToIndex [ftotal length]-3];
} else {
if ([ftotal hasSuffix:@"0"]) {
ftotal = [ftotal subStringToIndex [ftotal length]-1];
}
}
stringWithFormat
保证字符串末尾始终有一个 ".nn"
(这里的 n
是数字字符)。while
和 if
语句只是简单地去除末尾的零和小数点(如果它是整数的话)。我不熟悉Objective C,但使用标准的printf格式化是不可能实现的。
使用%g会有点效果,但对于大数或小数,它将使用科学计数法(例如9.6e+6,4.2e-7)而不是十进制表示。
在C/C++中提出了类似的问题,在那种情况下,答案是使用%f,然后从字符串中去掉任何尾随的0。并不是非常优雅。
我非常确定[[NSNumber numberWithFloat:f] stringValue]恰好符合您的要求。