【发布时间】:2011-12-13 14:06:10
【问题描述】:
我今天遇到了一个很奇怪的问题。 我有这个静态方法(我刚刚创建的 CommonUtilities 源文件的一部分,它收集了我想在代码中的任何位置访问的所有小的常用方法,就像我通常做的那样......)
我只想使用国际系统符号(k、M、G 等)将一个数字转换为其科学值
代码如下:
+ (NSString*)scientificFormatedStringForValue:(NSNumber*)value andUnits:(NSString*)_units
{
NSMutableString* retStr = [NSMutableString string];
long long longValue = [value longLongValue];
if (longValue > 1000000000)
{
[retStr appendFormat:@"%d Md%@", longValue / 1000000000, _units];
}
else if (longValue > 1000000)
{
[retStr appendFormat:@"%d M%@", longValue / 1000000, _units];
}
else if (longValue > 1000)
{
[retStr appendFormat:@"%d k%@", longValue / 1000, _units];
}
else
{
[retStr appendFormat:@"%d %@", longValue, _units];
}
return retStr;
}
这很容易吧?
好的,这是交易:_units 未正确转换。
在我的例子中,我使用这个:
[CommonUtilities scientificFormatedStringForValue:[NSNumber numberWithLongLong:longValue] andUnits:@"€"];
对于格式化的字符串,我得到 (null) 为 _units。如果我打印_units 的值,它就是一个点。所以,为了尝试调试这个,我只是替换了:
[retStr appendFormat:@"%d M%@", longValue / 1000000, _units];
与
[retStr appendFormat:@"%d M%@", longValue / 1000000, @"€"];
还是不行。它尝试传递一个字符(认为可能必须将 € 转换为一些 UTF8 的东西或其他什么。所以我将调用方法更改为:
[CommonUtilities scientificFormatedStringForValue:[NSNumber numberWithLongLong:longValue] andUnits:@"e"];
仍然是蹩脚的东西。我什至将@"€" 更改为 [NSString stringWithString:@"€"],但仍然是相同的输出!我无法弄清楚这里出了什么问题,我被卡住了。
我想到源文件的编码有问题,所以我把它删了重新创建,但还是同样的问题......
如果有人有最细微的线索,那将是最有帮助的。谢谢各位...
【问题讨论】:
-
你有 [retStr appendFormat:@"%d Md%@", longValue / 1000000000, _units],你不是说 appendFormat:@"%d Gd%@" 吗?千兆不是超级?
-
您是否尝试过在方法中创建
NSString,只是为了确定? -
@Gnat 这看起来像法语的十亿(Milliard)。
-
@Radada:如果你没有在你的方法中做任何其他事情,你真的不需要
NSMutableString,你可以直接创建并返回你的字符串。 -
我无法用普通的@"e" 重现该问题
标签: objective-c nsstring