gpt4 book ai didi

objective-c - formatString 的奇怪 NSString 行为

转载 作者:搜寻专家 更新时间:2023-10-30 19:44:49 25 4
gpt4 key购买 nike

我今天遇到了一个很奇怪的问题。我有这个静态方法(我刚刚创建的 CommonUtilities 源文件的一部分,它收集了我想在我的代码中的任何地方访问的所有小的通用方法,就像我通常做的 btw...)

我只想使用国际系统符号(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:@"€"],但仍然是相同的输出!我不知道这里出了什么问题,我被困住了。

想到源文件的编码有问题,删了重新创建,还是一样的问题....

如果有人知道哪怕是最微小的线索,那将是最有帮助的。谢谢大家...

最佳答案

问题是您正在尝试编写 int(32 位),但您传递的是 long long(64 位)并且它正在读取前 4 个字节longValuevalue_units 的最后 4 个字节。碰巧你的 long long 的低字节值是 nil 并且没有导致崩溃。您需要使用 %lld 而不是 %d 才能正确打印 long 值。

    longValue       NSString*
/---------------\ /---------\
| 8 bytes | | 4 bytes |
\---------------/ \---------/
^^^^^^^^ ^^^^^^^^ ^^^^^^^^^
%d %@ This gets ignored.
(reads 4) (reads this 4 bytes which happen to be nil)

关于objective-c - formatString 的奇怪 NSString 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8490524/

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