1. Pascal / Говнокод #1074

    +153

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    function B2R(Bytes: Int64): string;
     const
      k: int64 = 1024;
    begin
     if Bytes < k then result := IntToStr(Bytes) + 'B' else
     if Bytes < k*k then result := FloatToStr(Round(Bytes*10/k)/10) + 'K' else
     if Bytes < k*k*k then result := FloatToStr(Round(Bytes*10/(k*k))/10) + 'M' else
     if Bytes < k*k*k*k then result := FloatToStr(Round(Bytes*10/(k*k*k))/10) + 'G' else
     if Bytes < k*k*k*k*k then result := FloatToStr(Round(Bytes*10/(k*k*k*k))/10) + 'T' else
     result := IntToStr(Bytes);
    end;

    Функция из плагина для JAJC особенно "понравилось" созерцание деления и умножения на 10 ;)

    Запостил: guest, 20 Мая 2009

    Комментарии (8) RSS

    • klem4:
      Очень порадовало, спасибо))
      Ответить
    • всё ж логично, вдумайтесь.
      Ответить
    • Злобный Аноним:
      [quote=Автор]особенно "понравилось" созерцание деления и умножения на 10[/quote]
      Ну забыл человек привести к нецелочисленному типу... А идея-то в общем разумная, только поменять Round на Int. Или я чего-то не заметил?
      Ответить
    • klem4:
      Мне кажется, объявив дополнительный массив-константу с буквами по возможным степеням k, этот код можно сократить до 2х строк буквально, получить степень k из int(Bytes/1024) ну а дальше все просто. Вот примерно так ... Может и ошибаюсь.
      Ответить
    • а мне кажется, что конструкция вида round(x*10)/10 служит для округления до десятых
      Ответить
    • Злобный Аноним:
      Если я не идиёт, то
      [quote=Говногость]round(x*10)/10 [/quote]
      не округляет до десятых, ибо все операции тут целочисленные, включая деление. Вот если вставить Int вместо Round...
      Ответить
    • это delphi. если память не подводит, то для целочисленного деления используется div. Да и round возвращает что-то вроде real. Например
      x=1.12
      x*10=11.2
      round(x*10)=11
      round(x*10)/10=1.1
      Ответить
    • Хотя, да, ошибся. round возвращает int. Но деление все равно не целочисленное.
      Ответить

    Добавить комментарий