【问题标题】:NSDecimalNumber round long numbersNSDecimalNumber 整数整数
【发布时间】:2010-09-16 13:29:59
【问题描述】:

我正在尝试让 NSDecimalNumber 打印出 15 位或更多位的大数字。在 15 位数时,我看到 111,111,111,111,111。即使格式化的数字是 1111111111111111,我也会看到 15 位以上的数字 1,111,111,111,111,110。

一个例子来说明我的问题:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumSignificantDigits:25];
[formatter setUsesSignificantDigits:true];

NSDecimalNumber* test = [NSDecimalNumber decimalNumberWithString:@"12345678901234567890"];

NSString* output = [formatter stringFromNumber:test]; 
NSLog( @"num value: %@", test ); 
NSLog( @"str value: %@", output );

输出如下:

2010-09-16 09:24:16.783 SimpleCalc[739:207] num value: 12345678901234567890
2010-09-16 09:24:16.784 SimpleCalc[739:207] str value: 12,345,678,901,234,600,000

我错过了什么傻事?

【问题讨论】:

    标签: numbers nsnumberformatter nsdecimalnumber


    【解决方案1】:

    这里的问题是NSNumberFormatter 在内部没有处理NSDecimalNumbers,它们被转换为double,您会看到由此导致的精度损失。来自文档:

    表示包括整数、浮点数和双精度数;浮点数和双精度数可以格式化为指定的小数位。

    您可能应该看看NSDecimalNumber 上的- (NSString *)descriptionWithLocale:(NSDictionary *)locale 方法。

    【讨论】:

      【解决方案2】:

      NSDecimalString()。获取您的NSDecimalNumber(例如myDecimalNumber),通过decimalValueNSDecimal decimal = [myDecimalNumber decimalValue])提取NSDecimal,并使用NSString *myString = NSDecimalString(decimal)函数创建一个NSString

      https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/index.html#//apple_ref/c/func/NSDecimalString

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-26
        • 2014-11-01
        • 1970-01-01
        • 2011-01-29
        相关资源
        最近更新 更多