;将数值转换为表示以字节、千字节、兆字节或千兆字节为单位的数字的字符串,
;取决于大小。通过提供舍入到最接近的显示数字的选项来扩展 StrFormatByteSizeW
;或丢弃未显示的数字。

StrFormatByteSizeEx(int, flags := 0x2) {
    size := VarSetCapacity(buf, 0x0104, 0)
    if (DllCall("shlwapi.dll\StrFormatByteSizeEx", "int64", int, "int", flags, "str", buf, "uint", size) != 0)
        throw Exception("StrFormatByteSizeEx failed", -1)
    return buf
}

MsgBox % StrFormatByteSizeEx(2400)         ; -> 2.34 KB
MsgBox % StrFormatByteSizeEx(2400016, 0x1)    ; -> 2.29 MB【四舍五入】

; 2400016 / 1024 / 1024  ->  2.28883361816

; =============================================================
;将数值转换为字符串,该字符串表示以字节、千字节为单位的大小值表示的数字,
;兆字节或千兆字节,具体取决于大小。

/*
StrFormatByteSizeEx(int) {
    static size := StrLen(buf := "0123456789ABCDEF")
    if !(pstr := DllCall("shlwapi.dll\StrFormatByteSize64A", "int64", int, "str", buf, "uint", size, "astr"))
        throw Exception("StrFormatByteSize64 failed: " pstr, -1)
    return pstr
}

MsgBox % StrFormatByteSizeEx(2400016)         ; -> 2.28 MB
*/

; 2400016 / 1024 / 1024  ->  2.28883361816

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。