-1

私はそれに多くのことをしましたが、解決策を見つけることができません。タイトルでさえ明確に説明できません。

重量、数量、合計の 3 つの値があります

私は次のことをしました

float wq = [[weightarray objectAtIndex:selectedint]floatValue];
float q = [quantity floatValue];
float total = wq * q;

たとえば、もし

[weightarray objectAtIndex:selectedint] = @"3.14";
quantity = 4;

結果は

wq = 3.140000  q= 4.000000 total = 12.560000

しかし、私は必要です

wq = 3.14 total = 12.56   

何をすべきか?私はたくさん検索しましたが、誰かが NSDecimal を使用することを提案しています。

NSDecimalNumberHandler *roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:2 raiseOnExactness:FALSE raiseOnOverflow:TRUE raiseOnUnderflow:TRUE raiseOnDivideByZero:TRUE];

ただし、スケールはここでは 2 ではありません。wq 値には、ポイントの後に 3 つまたは 4 つの数値が含まれる場合があります。

合計 = 2.30000100 が合計 = 2.300001 が必要であることを意味する場合、これを解決するにはどうすればよいですか?

4

3 に答える 3

3

あなたが何を求めているのか完全にはわかりませんが、値に2 dpのみを表示したいようです。その場合、次のような文字列形式を使用できます。

    NSString *output = [NSString stringWithFormat:@"float = %.2f", 3.14];

.2 は、フロートを 2 dp に揃える必要があることを指定します

お役に立てれば

于 2013-02-08T11:06:56.490 に答える
2

それを達成するためのより直接的な方法があるかもしれませんが(私にはわかりません)、ここに提案があります...

  1. すでに行っているように文字列に変換します。
  2. [myString hasSuffix:@"0"]ゼロで終わるかどうかを確認するために使用します。
  3. [myString substringToindex:[myString length]-1]最後のゼロなしで新しい文字列を作成するために使用します。
  4. 繰り返す。

エレガントではないことはわかっていますが、誰かがより良い解決策を持っていない限り、これは少なくともあなたが望むことをするでしょう.

更新: スクラッチ - 発見したばかり[myString stringByTrimmingCharactersInSet:set]です。きっとこれはあなたが必要としているものに違いない...?

于 2013-02-08T11:34:31.860 に答える
0

最後に解決策が見つかりました、Martin のおかげです

float total = 12.56000;
NSString *s = [NSString stringWithFormat:@"%f", total];
NSLog(@"%@",s);
BOOL success;
success =NO;
while(!success)
{
    if ([s hasSuffix:@"0"])
    {
       s = [s substringWithRange:NSMakeRange(0,[s length]-1)];
    }
    else if ([s hasSuffix:@"."])
    {
        s = [s substringWithRange:NSMakeRange(0,[s length]-1)];
        success = YES;
    }
    else
        success = YES;
}
NSLog(@"%@",s);

合計 = 12.560000 の場合、合計 = 12.56 を返します。

合計 = 12.000000 の場合、合計 = 12 を返します。

合計 = 10.000000 の場合、合計 = 10 を返します。

合計 = 12.3000100 の場合、合計 = 12.30001 を返します。

于 2013-02-08T12:34:20.557 に答える