1

ここでNSNumberFormaterは、double の小数点以下の最大数を 2 に設定するために使用しています。NSNumberFormater正常に動作しているように見えますが、出力でわかるように、によって生成された文字列から double に変換しようとすると、NSLog小数点以下が削除され、末尾のゼロに置き換えられます。どうしてこれなの?

- (double)randomDoubleBetween:(double)smallNumber and:(double)bigNumber {
    double diff = bigNumber - smallNumber;
    double ranNum = (((double) (arc4random() % ((unsigned)RAND_MAX + 1)) / RAND_MAX) * diff) + smallNumber;

    NSNumberFormatter *doubleValueWithMaxDecimalDigits = [[NSNumberFormatter alloc] init];
    [doubleValueWithMaxDecimalDigits setNumberStyle:NSNumberFormatterDecimalStyle];
    [doubleValueWithMaxDecimalDigits setMaximumFractionDigits:2];
    NSNumber *num = [NSNumber numberWithDouble:ranNum];

    NSString *valueToReturn = [doubleValueWithMaxDecimalDigits stringFromNumber:num];
    NSLog(@"String value %@", valueToReturn);

    NSLog(@"Double value converted from string %f", [valueToReturn doubleValue]);
    return [valueToReturn doubleValue];
}

NSLog 出力:

2013-08-09 02:25:05.031 GG[27947:907] 文字列値 176,19

2013-08-09 02:25:05.035 GG[27947:907] 文字列 176.000000 から変換された倍精度値

4

1 に答える 1