Vim Round浮动到小数点后一位

时间:2015-08-17 02:29:25

标签: vim macvim

我在我的.vimrc中设置了一个函数(特别是使用MacVim,但这对于vim来说应该是通用的)来在我的状态行中显示文件大小(以字节,千字节和兆字节为单位)。虽然该功能非常完美无误,但却给了我意想不到的输出!事后看来,它确实产生了它应该的输出,但不是我想要的输出。

这里的功能是:

" I modified the FileSize() function shown here to suit my own preferences:
" http://got-ravings.blogspot.com/2008/08/vim-pr0n-making-statuslines-that-own.htm
function! StatuslineFileSize()
    let bytes = getfsize(expand("%:p"))
    if bytes < 1024
        return bytes . "B"
    elseif (bytes >= 1024) && (bytes < 10240)
        return string(bytes / 1024.0) . "K"
    elseif (bytes >= 10240) && (bytes < 1048576)
        return string(bytes / 1024) . "K"
    elseif (bytes >= 1048576) && (bytes < 10485760)
        return string(bytes / 1048576.0) . "M"
    elseif bytes >= 10485760
        return string(bytes / 1048576) . "M"
    endif
endfunction

以下是它的基本工作方式:

  1. 如果filesize小于1KB,则输出大小以字节为整数
  2. 如果filesize介于1KB和10KB之间,则输出大小以千字节为单位
  3. 如果filesize介于10KB和1MB之间,则输出大小以千字节为整数
  4. 如果filesize介于1MB和10MB之间,则输出大小以兆字节为单位
  5. 如果filesize大于10MB,则输出大小以兆字节为整数
  6. 步骤2和4产生的输出是小数,(6)精度位置。我想要的输出应该是小数,只有一个(1)精度位置。

    我已经搜索了round()trunc()函数的帮助文档,但它们只会将浮点数舍入并截断到最接近的整数值,这不是我想要的发生了。我还在Google和StackOverflow上搜索了解决方案,但我发现的大多数内容都涉及修改编辑缓冲区中的文本或完全不相关的问题,例如Java中的舍入浮点数(!!!)

    我最好寻找能够做到这一点的vim内置函数,la round({expr},{prec})trunc({expr},{prec}),但如果用户定义的函数可以提供足够优雅的解决方案,那么我和#39; m也是如此。如果输出是一个字符串,我不介意,因为我显然从StatuslineFileSize()返回一个字符串!

1 个答案:

答案 0 :(得分:2)

使用带有精确说明符的printf将结果转换为字符串而不是string

return printf('%.1fM', bytes / 1048576)