2014-09-29 4 views
1

잘라 내기이 스크립트는 프로그램에 값을 표시루아는 : 완벽하게 값

string.format("%d", math.floor(self:value())) -- Where self:value() is a number like 4.1256913947 

이 스크립트는 같은 값을 취 내 콘솔에 인쇄합니다.

math.floor(value) -- Where value is the same number as self:value() was...it's just being sent to another function as well 

문제는 표시 값과 콘솔 인쇄 값이 일치하지 않습니다. 이것은 거의 발생하지 않지만 드물게 발생하지만 사용자가 정수 (예 : 4.0029893417)를 넘는 데이터를 입력 할 때 아무 이유없이 3으로 줄 것입니다. 나는 math.ceil을 시도했지만 역 효과는 그것이 닫힐 때 (즉, 4.89898989) 5를 출력하지만 4를 출력한다. 숫자를 완벽하게 잘라내는 방법이 있는가? 따라서 올바르게 표시하고 올바르게 인쇄합니까?

참고 : 값이 변경 될 수없는 경우가 있는데, 때로는 여분의 소수 자릿수가 있어야하고 다른 장소/기능에서 처리되기도합니다.

감사합니다 :) 호기심에서

+3

문제는 다른 곳에서 발생할 수 있습니다. [Minimal, Complete, Verifiable example] (http://stackoverflow.com/help/mcve)을 제공하십시오. –

답변

1

, 난 당신이 설명 된 조건의 일부를 사용하여, 몇 가지 테스트를 수행했습니다. 불행히도 (또는 다행스럽게도) 내가 말하는 문제를 재현 할 수 없었습니다. 코드 조각 아래 추가하고 결과는 약 4 다음 인쇄의 두 가지 방법을 비교 있도록 임의의 숫자를 뺍니다 (생산 문자열 비교) : 당신이 추측 수 있듯이

for i=1,10000000 do 
    local value = 3.9 + math.random() * 0.2 
    local s1 = string.format("%d", math.floor(value)) 
    local s2 = tostring(math.floor(value)) 
    if s1 ~= s2 then print "Error" end 
end 

, '오류'가 표시되지 않습니다 쪽으로. 난 당신이 무엇을 설명 유사한 결과를 얻을 기대했다 매우 적은 수를 추가

local l = 4 
for i=1,100000 do 
    local k = math.pow(10,-i) 
    local rand = math.random() * 0.1 
    local subtracted = l - k - rand 
    if math.floor(subtracted + k + rand) < 4 then 
     print "error" 
    end 
end 

, 그러나 다시, 문제는 표시되지 않습니다 :

나는 또 다른 실험을했습니다.

그래서이 문제는 아마도 function self : value()와 variable value (실제로는 때때로 서로 다른 값을 가짐)의 차이점에 놓여 있다고 결론을 내려야합니다.

+0

누군가 다른 사람도 지적했듯이 문제를 일으키는 또 다른 부분이었습니다. 외관상으로는 저의 앞에 사람은 전시에있는 동일한 가치를 무시하는 다른 원본 또는 부분이다는 것을 저에게 말하는 것을 잊는다, 그래서 표시는 정도에 "부정확하다". 이 함수는 원래의 함수 (string.format (% d math.floored 등) 및이 행 (값을 엉망으로 만든))를 사용하여 호출되었습니다 ... string.format ("%.".. math "f", self : value())'당신이 볼 수 있듯이 표시되는 값을 약간 씩 조정하게 될 것입니다 (예 : math.ceil (-math.log (self._step)/math.log (10))) 끄기 (적어도, 나는 생각한다) – B1313

+0

그래서 나는 self._step에 대한 수표를 덧붙였다. 그 중 하나는 전체 숫자이다. 지금까지는 작동하지만, 실제로 문제가 있는지를 확인하거나 확인하려고하는 사람이 있다면, 그 점은 인정 될 것입니다. 루아가 어떻게 처리하는지는 로그가 아니라 그다지 훌륭하지 않습니다. – B1313