Я хочу преобразовать одно число байтов в размер файла (который имеет .KB, .MB и .GB).
Если число равно 0, я не хочу иметь никаких единиц. Если число в точности делится на 1024 (не с плавающей точкой), я напечатаю: x. В противном случае я хочу напечатать числа с плавающей запятой с точностью до одного градуса.
Я сделал код, который, кажется, работает хорошо, но очень громоздко. Я ищу способы сделать мою функцию чище / эффективнее, пожалуйста, это, честно говоря, ОЧЕНЬ некрасиво:
char *
calculateSize( off_t size )
{
char *result = (char *) malloc(sizeof(char) * 20);
static int GB = 1024 * 1024 * 1024;
static int MB = 1024 * 1024;
static int KB = 1024;
if (size >= GB) {
if (size % GB == 0)
sprintf(result, "%d GB", size / GB);
else
sprintf(result, "%.1f GB", (float) size / GB);
}
else if (size >= MB) {
if (size % MB == 0)
sprintf(result, "%d MB", size / MB);
else
sprintf(result, "%.1f MB", (float) size / MB);
}
else {
if (size == 0) {
result[0] = '0';
result[1] = '\0';
}
else {
if (size % KB == 0)
sprintf(result, "%d KB", size / KB);
else
sprintf(result, "%.1f KB", (float) size / KB);
}
}
return result;
}
Я был бы очень признателен, если бы у кого-то был лучший способ достичь того же результата, пожалуйста.