gpt4 book ai didi

iphone - 如何将巨大的 NSDecimal 格式化为字符串?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:25:50 24 4
gpt4 key购买 nike

得到了一个高精度的大NSDecimal。像这样:

NSString *decStr = @"999999999999.999999999999";
NSDecimal dec;
NSScanner *scanner = [[NSScanner alloc] initWithString:decStr];
[scanner scanDecimal:&dec];

NSDecimalNumber *decNum = [[NSDecimalNumber alloc] initWithDecimal:*dec];

我可以很容易地得到我的 NSDecimal 的字符串表示:

NSString *output = [decNum stringValue];

或者

NSString *output = [decNum descriptionWithLocale:nil];

但是在屏幕上输出的格式永远不正确:

output = 999999999999.999999999999

我希望它有像 999,999,999,999.999999999999 这样的组分隔

所以我尝试了一个NSNumberFormatter:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setAllowsFloats:YES];
[formatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[formatter setNumberStyle:kCFNumberFormatterDecimalStyle];

NSString *output = [formatter stringFromNumber:resultDecNum];

最后是这样的:

output = 1,000,000,000,000

有没有一种方法可以在不损失精度的情况下根据用户区域设置正确格式化大而高精度的 NSDecimal

最佳答案

正如您已经注意到的,NSNumberFormatter 转换为 float 。可悲的是,只有 descriptionWithLocale 作为替代方案,它没有提供改变您想要的行为的方法。最好的方法应该是编写自己的格式化程序,Apple 甚至为此提供了指南:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DataFormatting/DataFormatting.html

我会以 descriptionWithLocale 作为起点并寻找分隔符。然后在它前面每 3 位添加一个逗号。

编辑:

另一个想法是将整数部分的字符串和分隔符后面的东西分开,然后使用格式化程序格式化整数部分,然后将其与其余部分组合。

// Get the number from the substring before the seperator 
NSString *output = [number descriptionWithLocale:nil];
NSNumber *integerPartOnly = [NSNumber numberWithInt:[output intValue]];

// Format with decimal separators
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[formatter setNumberStyle:kCFNumberFormatterDecimalStyle];

NSString *result = [formatter stringFromNumber:integerPartOnly]

// Get the original stuff from behind the separator
NSArray* components = [output componentsSeparatedByString:@"."];
NSString *stuffBehindDot = ([components count] == 2) ? [components objectAtIndex: 1] : @"";

// Combine the 2 parts
NSString *result = [result stringByAppendingString:stuffBehindDot];

关于iphone - 如何将巨大的 NSDecimal 格式化为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9922630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com