Vim圆形浮动到小数点后一位

Vim圆形浮动到小数点后一位,vim,macvim,Vim,Macvim,我正在my.vimrc中设置一个函数(特别是使用MacVim,但这对vim来说应该是通用的),以显示状态行中的文件大小(以字节、千字节和兆字节为单位)。虽然函数工作得非常完美,没有错误,但它给了我意想不到的输出!事后看来,它确实产生了它应该产生的输出,但不是我想要的输出 下面是函数: “我修改了此处显示的FileSize()函数以适合我自己的偏好: " http://got-ravings.blogspot.com/2008/08/vim-pr0n-making-statuslines-that

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

下面是函数:

“我修改了此处显示的FileSize()函数以适合我自己的偏好:
" http://got-ravings.blogspot.com/2008/08/vim-pr0n-making-statuslines-that-own.htm
功能!StatuslineFileSize()
let bytes=getfsize(展开(“%:p”))
如果字节<1024
返回字节。“B”
elseif(字节数>=1024)和&(字节数<10240)
返回字符串(字节/1024.0)。“K”
elseif(字节数>=10240)和&(字节数<1048576)
返回字符串(字节/1024)。“K”
elseif(字节>=1048576)和&(字节<10485760)
返回字符串(字节/1048576.0)。“M”
elseif字节>=10485760
返回字符串(字节/1048576)。“M”
恩迪夫
端功能
以下是它的基本工作方式:

  • 如果filesize小于1KB,则将字节大小作为整数输出
  • 如果文件大小介于1KB和10KB之间,则以十进制形式输出大小(以KB为单位)
  • 如果文件大小介于10KB和1MB之间,则将大小(以千位为单位)作为整数输出
  • 如果文件大小介于1MB和10MB之间,则输出大小(以兆字节为单位)作为十进制
  • 如果文件大小大于10MB,则以整数形式输出大小(以MB为单位)
  • 步骤2和步骤4的输出为小数,精度为六(6)位。我想要的输出应该是小数,精度只有一位

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


    我最好是寻找一个vim内置函数来实现这一点,一个la
    round({expr},{prec})
    trunc({expr},{prec})
    ,但是如果用户定义的函数可以提供足够优雅的解决方案,那么我也完全支持。我不介意输出是否是字符串,因为我显然是从
    StatuslineFileSize()
    返回字符串

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

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

    德瑞普!我简直不敢相信我竟然忘了搜索
    printf()
    !这正是我需要的!非常感谢D