Насколько точной должна быть конверсия?
s/0*([0-9]+)[0-9]{3}K/\1M/g
будет обрезать последние три числа размером в четыре или более цифр ... но это усечение, а не даже рассмотрим математику.(Например, 1999K -> 1M)
Возможно, лучшим способом было бы s/K/000/g
и s/M/000000/g
, чтобы превратить его в (грубое) число байтов, а затем преобразовать, как вы хотите, обратно.
Наилучшим из возможных методов будет его обработка, если он имеет M, умноженное на 1024 * 1024;если он имеет K, умножьте на 1024. (если он имеет G, умножьте на 1024 *1024* 1024).Затем обработайте полученный размер так, как вы пытаетесь.- Обратите внимание, что было бы неплохо сохранить размер файла в виде целого числа, а не строки.
Для обработки и вывода, серия if, вероятно, достаточно хороша, и вы можете установить точные допускиза то, что что-то должно быть большим, чтобы отображаться как M вместо K. - Или, если вы просто хотите M, нет if, и вы просто делите на 1024 * 1024.