Lua向C++中传输数值,C++部分取为float类型时数据时准确的(此时不能在linux gdb 断点 p 出数据,否则数据也会不准确,而实际时准确的。)
而Lua从C++中获得float 或者 double数据时,会出现 float 108.032 获得到Lua中时 变为 108.03197994 之类的变化,此时需要调用
--从C++来的各类浮点数 都要经过这个函数的精度转化
function Lib:CFloatDataplusToLuaData(measured,szBaseClass)
local BASECLASS;
if(szBaseClass == "float") then
BASECLASS = 6;
elseif(szBaseClass == "double") then
BASECLASS = 15;
end
local nMultiple;
local nAccuracy;
for nBase=1,BASECLASS do
nAccuracy = 10 ^ nBase;
local xValue = measured / nAccuracy;
if(xValue < 1.0) then
nMultiple = nBase;
break;
end
end
nAccuracy = 10 ^ (BASECLASS - nMultiple);
local decimal = measured * nAccuracy;
decimal = (decimal % 1 >= 0.5 and math.ceil(decimal)) or math.floor(decimal);
decimal = decimal / nAccuracy;
return decimal;
end
从而使 108.03197994 变为 108.032
因为float 为6位,不能一味的取小数点后 6为,那样必读时错误的,float是6位有效,
如果小数点前有5位 ,那么小数点后只有一位有效,多余的精度已经丢失