将文件大小转换为适当的形式显示奇怪的输出
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直接传过去了。现在,我的文件大小显示正确。
感谢大家的建议。
我在转换时遇到严重问题。 我尝试的第一个解决方案是下面的代码 ::
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直接传过去了。现在,我的文件大小显示正确。
感谢大家的建议。