NSIS 圆盘大小到最接近的小数位

问题描述 投票:0回答:1

以下代码以 GB 为单位返回系统驱动器的大小:

!include logiclib.nsh
section
  system::call 'kernel32::GetDiskFreeSpaceEx(t"$windir", *l.r0, *l, *l)'
  size:
    ${if} $0 u> 1024
      system::int64op $0 / 1024
      pop $0
      goto size
    ${endif}
  detailprint $0
sectionend

如何将大小四舍五入到最接近的小数点后 1 位或 2 位,如使用内置目录页面所见?我试过

intop
但它只是返回
0
Math::Script
插件我不懂,如果能用

nsis
1个回答
0
投票

这可能更像是一个数学问题而不是 NSIS 问题,但这里有一个简单的解决方案:

!include logiclib.nsh
Section
    System::Call 'KERNEL32::GetDiskFreeSpaceEx(t"$windir", *l.r0, *l, *l)'
    StrCpy $1 00
size:
    StrCpy $1 $1 2 ; A lazy way to "round"
    ${If} $0 U> 1024
        System::Int64op $0 % 1024
        Pop $1
        System::Int64op $0 / 1024
        Pop $0
        Goto size
    ${EndIf}
    DetailPrint $0.$1
SectionEnd
© www.soinside.com 2019 - 2024. All rights reserved.