C 将双精度限制为小数点后两位

C 将双精度限制为小数点后两位,c,objective-c,cocoa,formatting,C,Objective C,Cocoa,Formatting,如何实现从double到string的以下转换: 1.4324 => "1.43" 9.4000 => "9.4" 43.000 => "43" i、 我想四舍五入到小数点,但不想要任何尾随的零 9.4 => "9.40" (wrong) 43.000 => "43.00" (wrong) 所以我现在的代码不起作用,因为它显示了多余的零: [NSString stringWithFormat: @"%.2f", total] 使用。请参阅的章节。我不熟悉obj

如何实现从double到string的以下转换:

1.4324 => "1.43"
9.4000 => "9.4"
43.000 => "43"
i、 我想四舍五入到小数点,但不想要任何尾随的零

9.4 => "9.40" (wrong)
43.000 => "43.00" (wrong)
所以我现在的代码不起作用,因为它显示了多余的零:

[NSString stringWithFormat: @"%.2f", total]

使用。请参阅的章节。

我不熟悉objective C,但这在标准的printf样式格式中是不可能实现的

使用%g可以算是一种工作,但是对于大的或小的数字,它将使用科学记数法(例如9.6e+6,4.2e-7)而不是十进制记数法


答案是,在这种情况下,答案是使用%f,然后从字符串中删除任何尾随的0。不太优雅。

最简单的方法可能是自己滚。我以前不得不在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];
}
或者这种(可能更快的)变体:

stringWithFormat
保证在结尾处始终有一个
“.nn”
(其中
n
是一个数字字符)。
while
if
只需去掉尾随的零,如果是整数,则去掉尾随的小数


显然,您可能希望将其放在函数或类中,这样您就可以从任何地方获取它,而不必到处复制代码。

我非常确定[[NSNumber numberWithFloat:f]stringValue]完全符合您的要求。

您犯了一个简单的错误。这将有助于:

[NSString stringWithFormat: @"%.2lf", total]

嘿,这就是我的答案,你称之为不雅:-)事实上,在Objective-C中它要优雅得多,因为字符串实际上是字符串,而不是C字符数组及其所有缺点。它是有效的,但如何工作?这不是的副本,所以我认为它应该不标记为副本。这个问题是关于如何限制最多两位小数,而另一个问题是如何限制始终为两位小数。后者很简单,在原始问题中已经提到了。是的,它不是重复的。有人对他们的国防力量感到兴奋。
[NSString stringWithFormat: @"%.2lf", total]