将文件大小转换为适当的形式显示奇怪的输出

Conversion of file size into appropriate form shows weird output

我在转换时遇到严重问题。 我尝试的第一个解决方案是下面的代码 ::

    NSByteCountFormatter *formatter = [[NSByteCountFormatter alloc] init];
    formatter.allowsNonnumericFormatting = NO;

    return [NSByteCountFormatter stringFromByteCount:valueFromAPI countStyle:NSByteCountFormatterCountStyleMemory];

我尝试的第二个解决方案是下面的代码::

double convertedValue = (double)valueFromAPI;
DebugLog(@"%f",convertedValue);

int multiplyFactor = 0;

NSArray *tokens = @[@"bytes",@"KB",@"MB",@"GB",@"TB",@"PB",@"EB",@"ZB",@"YB"];

while (convertedValue >= 1024) {
    convertedValue /= 1024;
    multiplyFactor++;
}
return [NSString stringWithFormat:@"%4.0f %@",convertedValue, tokens[multiplyFactor]];

但两者 returns 相同的奇怪输出。查了很多情况发现只有文件比较小的时候才会出现这种情况

图像显示问题:

该图像清楚地表明返回的文件大小为负数且为 exobyte(EB),实际上只是从 UIImagePickerController 中选取的图像。 在第二个解决方案中,我发现在从 long long 转换为 double` 时,它被转换为扩展格式,从而产生了问题。

我不知道怎么解决。请帮帮我。提前致谢。

尝试this方法。

用法:

#import "FileSize.h"

...

unsigned long long fileSize = ...; 
NSString *compressedFilesSize = [FileSize convertSize:fileSize];     
NSLog(@"File size : %@", compressedFilesSize);

通过评论与您交谈,您表示 valueFromAPI 是一个 NSString *,在这种情况下,问题是您正在转换 地址 的字符串,而不是 value 它包含:

double convertedValue = (double)valueFromAPI;

你想要:

double convertedValue = [valueFromAPI doubleValue];
- (NSString*)transformedValue:(double) valueFromAPI
{
      NSByteCountFormatter *formatter = [[NSByteCountFormatter alloc] init];
      formatter.allowsNonnumericFormatting = NO;
      return [NSByteCountFormatter valueFromAPI countStyle:NSByteCountFormatterCountStyleMemory];
}

我正在将 valueFromAPI 转换为 'long long',然后再转换为 'double',这造成了问题。于是我把NSString转成double直接传过去了。现在,我的文件大小显示正确。

感谢大家的建议。