lua中精度计算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua中精度计算相关的知识,希望对你有一定的参考价值。

参考技术A --1.使用string格式化

--保留2位小数,返回字符串类型

function strFormat(num)

    return string.format("%.2f", num)

end

--2.数学计算,去除精度后的数字

--保留2位小数返回number类型

function numberFormat(num)

    return math.floor(num * 100) / 100

end

--print(strFormat(1.13456))

--print(numberFormat(123.456789))

--延申使用

--@return number

--@param num 数字

--@param accurancy 精度 正整数

function accurancyFormat(num, accurancy)

    if type(num) == "number" and type(accurancy) == "number" then

        if accurancy % 1 == 0 and accurancy > 0 then

            local num1 = math.pow(10, accurancy)

            return math.floor(num * num1) / num1

        else

            error("请输入类型为正整数的精度")

        end

    else

        error("请输入2个number类型")

    end

end

--print(accurancyFormat(1.2, 2))

--取余求精度的局限性(部分版本会出现问题)

function accFormat(num, accurancy)

    return num - num % math.pow(0.1, accurancy)

end

--由于(部分版本)lua中1%0.1 = 0.1 而并不是0,所以如果当前num的精度小于输入的精度数时会出现问题

--print(1 % 0.1)

--print(accFormat(1, 1))

--正确版本的取余实现 a % b == a - ((a // b) * b)

--取余求精度的优化

function fmod(num1, num2)

    return num1 - num1 // num2 * num2

end

function accFormatExtend(num, accurancy)

    return fmod(num ,math.pow(0.1, accurancy))

end

--print(fmod(1, 0.1))

--print(1 % 0.1)

--print(accFormatExtend(1, 1))

在Lua中计算含中文的字符串的长度

 1 --[[
 2     @desc: 计算字符串字符个数
 3     author:{author}
 4     time:2017-12-29 16:08:11
 5     --@inputstr: 源字符串
 6     return 字符个数
 7 ]]
 8 function getStringCharCount(str)
 9     local lenInByte = #str
10     local charCount = 0
11     local i = 1
12     while (i <= lenInByte) 
13     do
14         local curByte = string.byte(str, i)
15         local byteCount = 1;
16         if curByte > 0 and curByte <= 127 then
17             byteCount = 1                                               --1字节字符
18         elseif curByte >= 192 and curByte < 223 then
19             byteCount = 2                                               --双字节字符
20         elseif curByte >= 224 and curByte < 239 then
21             byteCount = 3                                               --汉字
22         elseif curByte >= 240 and curByte <= 247 then
23             byteCount = 4                                               --4字节字符
24         end
25         
26         local char = string.sub(str, i, i + byteCount - 1)
27         i = i + byteCount                                               -- 重置下一字节的索引
28         charCount = charCount + 1                                       -- 字符的个数(长度)
29     end
30     return charCount
31 end

 

以上是关于lua中精度计算的主要内容,如果未能解决你的问题,请参考以下文章

《Lua程序设计》之 数值

Lua 有效数字

js精度计算

单精度、双精度各有几位小数?

计算几何中的精度问题(转)

浮点数中单精度和双精度的编码表示