web-dev-qa-db-ja.com

floatを小数点以下2桁まで表示する

floatに値25.00がありますが、画面に表示すると25.0000000です。
小数点以下2桁で値を表示するにはどうすればよいですか?

291
ron

数字がどのように格納されているかという問題ではなく、表示方法によって異なります。それを文字列に変換するとき、あなたは希望する精度に丸めなければなりません、あなたのケースではそれは小数点以下2桁です。

例えば。:

NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];

%.02fは、float(%f)をフォーマットすること、そしてそれは2桁に丸められること、そして0sで埋められることをフォーマッタに伝えます。

例えば。:

%f = 25.000000
%.f = 25
%.02f = 25.00
638
Andrew Grant

ここにいくつかの修正があります -

//for 3145.559706

Swift

let num: CGFloat = 3145.559706
print(String(format: "%f", num)) = 3145.559706
print(String(format: "%.f", num)) = 3145
print(String(format: "%.1f", num)) = 3145.6
print(String(format: "%.2f", num)) = 3145.56
print(String(format: "%.02f", num)) = 3145.56 // which is equal to @"%.2f"
print(String(format: "%.3f", num)) = 3145.560
print(String(format: "%.03f", num)) = 3145.560 // which is equal to @"%.3f"

Obj-C

@"%f"    = 3145.559706
@"%.f"   = 3146
@"%.1f"  = 3145.6
@"%.2f"  = 3145.56
@"%.02f" = 3145.56 // which is equal to @"%.2f"
@"%.3f"  = 3145.560
@"%.03f" = 3145.560 // which is equal to @"%.3f"

等々...

190
Vaibhav Saran

NSNumberFormatterを使ってみることもできます。

NSNumberFormatter* nf = [[[NSNumberFormatter alloc] init] autorelease];
nf.positiveFormat = @"0.##";
NSString* s = [nf stringFromNumber: [NSNumber numberWithFloat: myFloat]];

あなたもネガティブフォーマットを設定する必要があるかもしれませんが、私はそれを理解するのに十分賢いと思います。

20
Rick

私は上記の答えに基づいてSwift拡張を作りました

extension Float {
    func round(decimalPlace:Int)->Float{
        let format = NSString(format: "%%.%if", decimalPlace)
        let string = NSString(format: format, self)
        return Float(atof(string.UTF8String))
    }
}

使用法:

let floatOne:Float = 3.1415926
let floatTwo:Float = 3.1425934
print(floatOne.round(2) == floatTwo.round(2))
// should be true
10
codingrhythm

Swift Languageでは、見せたい場合は、このように使用する必要があります。たとえば、UITextViewでdouble値を割り当てるには、次のようにします。

let result = 23.954893
resultTextView.text = NSString(format:"%.2f", result)

Objective-cがNSLog()を使用するのと同じようにLOGで表示したい場合は、Swift言語で次のようにします。

println(NSString(format:"%.2f", result))
9
imti

IN object-cでは、(NSStringへのポインタの代わりに)通常のchar配列を扱っているのであれば、次のものも使用できます。

printf("%.02f", your_float_var);

OTOH、あなたが欲しいのがchar配列にその値を格納することであるなら、あなたは使うことができます:

sprintf(your_char_ptr, "%.02f", your_float_var);
3

すべての答えの問題点は、除算を使用したので乗算してから除算すると精度の問題が生じることです。私はずっと前にPDP8でのプログラミングからこれを学びました。これを解決する方法は次のとおりです。

return roundf(number * 100) * .01;

したがって、15.6578は15.65だけを返し、15.6578999やそのような意図しないものは返さない.

あなたが望む精度のレベルはあなた次第です。製品を除算しないで、10進数で乗算してください。面白い文字列変換は必要ありません。

3
ztalbot

Swiftの別の方法(NSStringを使用せず):

let percentage = 33.3333
let text = String.localizedStringWithFormat("%.02f %@", percentage, "%")

P.Sこの解決法は、CGFloat型ではFloatDoubleでのみテストされていません。

1
Aks

以下のようにNSNumberFormattermaximumFractionDigitsと共に使用します。

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.maximumFractionDigits = 2;
NSLog(@"%@", [formatter stringFromNumber:[NSNumber numberWithFloat:12.345]]);

そして、あなたは12.35を得るでしょう

1
Allen Huang

精度に応じて動的にフォーマットする方法は次のとおりです。

+ (NSNumber *)numberFromString:(NSString *)string
{
    if (string.length) {
        NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
        f.numberStyle = NSNumberFormatterDecimalStyle;
        return [f numberFromString:string];
    } else {
        return nil;
    }
}

+ (NSString *)stringByFormattingString:(NSString *)string toPrecision:(NSInteger)precision
{
    NSNumber *numberValue = [self numberFromString:string];

    if (numberValue) {
        NSString *formatString = [NSString stringWithFormat:@"%%.%ldf", (long)precision];
        return [NSString stringWithFormat:formatString, numberValue.floatValue];
    } else {
        /* return original string */
        return string;
    }
}

例えば.

[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:4];

=> 2.3453

[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:0];

=> 2

[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:2];

=> 2.35(切り上げ)

1
Ryan

客観的には-cは2桁の10進数で浮動小数点数値を表示したいのですが、表示したい小数点以下の桁数を示す引数を渡してください。

1
shaunak

あなたも値を浮動する必要があるならば:

NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];
float floatTwoDecimalDigits = atof([formattedNumber UTF8String]);
0
loretoparisi
 lblMeter.text=[NSString stringWithFormat:@"%.02f",[[dic objectForKey:@"distance"] floatValue]];
0
Rinju Jain