2009-07-11 5 views
18

二重にはどうすれば文字列にダブルから、次の変換を達成します:リミット2つの小数点以下

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] 
+1

これはhttp://stackoverflow.com/questions/4985791/round-double-value-to-2-decimal-placesの重複ではありませんので、私はそれはのように無印されるべきだと思うが重複する。この問題は小数点以下2桁の*最大値*に制限する方法ですが、もう1つの問題は*常に*小数点以下2桁に制限する方法です。後者は簡単で元の質問ですでに言及されています。 –

+0

それは重複ではありません。誰かがモッドパワーに興奮しています。 – Jacob

答えて

1

私は客観的なCに精通していませんが、これは標準のprintf形式の書式では不可能です。

%gを使用するとソート・オブ・ワークになりますが、大数または小数の場合は小数点表記ではなく科学記法(例:9.6e + 6、4.2e-7)を使用します。

equivalent question was asked for C/C++ hereです。この場合、答えは%fを使用して、文字列の末尾の0を取り除くことです。正確ではない。

+0

ねえ、それはあなたが不気味だと呼んでいる私の答えでした:-)実際には、Objective-Cでは文字列が文字列であり、Cのchar配列ではありません。 – paxdiablo

4

最も簡単な方法は、おそらく自分自身をロールバックすることです。私はprintfの書式設定で必要な振る舞いを得る方法がないので、Cでこれをやらなければなりませんでした。

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保証

が常に存在します( nが数字文字です)最後に ".nn"私はこれを試してみるだろう。 whileifは、末尾のゼロと、それが整数の場合は末尾の10進数を取り除きます。

明らかに、どこにでもコードを複製することなくどこからでもアクセスできるように、関数またはクラスに配置することができます。

-2

私は[[NSNumber numberWithFloat:f] stringValue]があなたが望むものとまったく同じであると確信しています。

35

あなたは簡単な間違いをしました。これは動作します:

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

それは動作しますが、どうですか? – Beniamin

関連する問題