将一个双精度数限制为两位小数
如何实现从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]
使用NSNumberFormatter 。 请参阅“ 数据格式编程指南 ”中有关数字格式化器的章节。
你弄错了。 这将有效:
[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
简单地剥离尾随零和尾随小数(如果它是整数)。
显然,您可能希望将其放在函数或类中,这样您就可以从任何地方获取它,而无需在整个地方复制代码。
我不熟悉目标C,但标准的printf样式格式化是不可能的。
使用%g可以分类工作,但对于大数或小数,它将使用科学记数法(例如9.6e + 6,4.2e-7)而不是十进制表示法。
这里有同等的问题要求C / C ++ ,在这种情况下答案是使用%f然后从字符串中删除任何尾随的0。 不完全优雅。
我很确定[[NSNumber numberWithFloat:f] stringValue]完全符合您的要求。