如何实现以下从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]
答案 0 :(得分:35)
你犯了一个简单的错误。这将有效:
[NSString stringWithFormat: @"%.2lf", total]
答案 1 :(得分:24)
答案 2 :(得分:4)
最简单的方法就是自己动手。我之前必须在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
只会删除尾随零和尾随小数。
显然,您可能希望将其放在函数或类中,这样您就可以从任何地方获取它,而无需在整个地方复制代码。
答案 3 :(得分:1)
我不熟悉目标C,但这对于标准的printf样式格式化是不可能的。
使用%g可以分类工作,但对于大数或小数,它将使用科学记数法(例如9.6e + 6,4.2e-7)而不是十进制表示法。
equivalent question was asked for C/C++ here,在这种情况下,答案是使用%f,然后从字符串中删除任何尾随的0。不太优雅。
答案 4 :(得分:-2)
我很确定[[NSNumber numberWithFloat:f] stringValue]完全符合您的要求。