커뮤니티

int, floor, ceiling 함수 문의

프로필 이미지
richon
2020-12-10 11:07:02
857
글번호 144573
답변완료
안녕하세요. 시스템 개발 중에 int, floor, ceiling 함수를 써야할 경우가 생겨서 개발중인데 원하는 값이 정확하게 산출되지 않아 점검해보니, 위의 함수가 제가 원하는 값으로 산출되지 않는 듯 합니다. int(1841.950000) --> 1841 int(1842.000000) --> 1841 이렇게 표시됩니다. 1. 두번째 값이 1842로 되어야 맞는 것 같은데 확인바랍니다. 2. 두번째 값이 1842로 산출되게 하려면 어떻게 해야 하는지도 알려주세요. 감사합니다. var : ii(0); if BarIndex == 0 Then { For ii = close to close+1 step 0.01 { var1 = ii /0.2; Print("intfloorceiling.txt", "ii=%.2f, value =%f, int = %f, intPortion=%f, floor = %f, celing=%f",ii, var1, int(var1), IntPortion(var1), floor(var1), Ceiling(var1)); } } 2020-12-07 14:53:59 ii=368.39, value =1841.950000, int = 1841.000000, intPortion=1841.000000, floor = 1841.000000, celing=1842.000000 2020-12-07 14:53:59 ii=368.40, value =1842.000000, int = 1841.000000, intPortion=1841.000000, floor = 1841.000000, celing=1842.000000 2020-12-07 14:53:59 ii=368.41, value =1842.050000, int = 1842.000000, intPortion=1842.000000, floor = 1842.000000, celing=1843.000000
지표
답변 3
프로필 이미지

예스스탁 예스스탁 답변

2020-12-10 11:33:58

안녕하세요 예스스탁입니다. int는 정수값만 취할때 사용합니다. int(1.1) --> 1 int(1.8) --> 1 round함수 사용하셔서 반올림 처리해 사용하셔야 합니다. round(1841.950000,0) --> 1842 즐거운 하루되세요 > richon 님이 쓴 글입니다. > 제목 : int, floor, ceiling 함수 문의 > 안녕하세요. 시스템 개발 중에 int, floor, ceiling 함수를 써야할 경우가 생겨서 개발중인데 원하는 값이 정확하게 산출되지 않아 점검해보니, 위의 함수가 제가 원하는 값으로 산출되지 않는 듯 합니다. int(1841.950000) --> 1841 int(1842.000000) --> 1841 이렇게 표시됩니다. 1. 두번째 값이 1842로 되어야 맞는 것 같은데 확인바랍니다. 2. 두번째 값이 1842로 산출되게 하려면 어떻게 해야 하는지도 알려주세요. 감사합니다. var : ii(0); if BarIndex == 0 Then { For ii = close to close+1 step 0.01 { var1 = ii /0.2; Print("intfloorceiling.txt", "ii=%.2f, value =%f, int = %f, intPortion=%f, floor = %f, celing=%f",ii, var1, int(var1), IntPortion(var1), floor(var1), Ceiling(var1)); } } 2020-12-07 14:53:59 ii=368.39, value =1841.950000, int = 1841.000000, intPortion=1841.000000, floor = 1841.000000, celing=1842.000000 2020-12-07 14:53:59 ii=368.40, value =1842.000000, int = 1841.000000, intPortion=1841.000000, floor = 1841.000000, celing=1842.000000 2020-12-07 14:53:59 ii=368.41, value =1842.050000, int = 1842.000000, intPortion=1842.000000, floor = 1842.000000, celing=1843.000000
프로필 이미지

richon

2020-12-10 11:52:50

정수값만 취하려고 int, floor, ceiling 함수를 이용해보려고 한 것입니다. 그런데, 아래와 같이 int(1842.000000)를 하면 제 상식으로는 1842가 나와야 할 것 같은데, 찍히는 것은 1841 입니다. 다시 한번 어떻게 처리해야 할지 부탁합니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : int, floor, ceiling 함수 문의 > 안녕하세요 예스스탁입니다. int는 정수값만 취할때 사용합니다. int(1.1) --> 1 int(1.8) --> 1 round함수 사용하셔서 반올림 처리해 사용하셔야 합니다. round(1841.950000,0) --> 1842 즐거운 하루되세요 > richon 님이 쓴 글입니다. > 제목 : int, floor, ceiling 함수 문의 > 안녕하세요. 시스템 개발 중에 int, floor, ceiling 함수를 써야할 경우가 생겨서 개발중인데 원하는 값이 정확하게 산출되지 않아 점검해보니, 위의 함수가 제가 원하는 값으로 산출되지 않는 듯 합니다. int(1841.950000) --> 1841 int(1842.000000) --> 1841 이렇게 표시됩니다. 1. 두번째 값이 1842로 되어야 맞는 것 같은데 확인바랍니다. 2. 두번째 값이 1842로 산출되게 하려면 어떻게 해야 하는지도 알려주세요. 감사합니다. var : ii(0); if BarIndex == 0 Then { For ii = close to close+1 step 0.01 { var1 = ii /0.2; Print("intfloorceiling.txt", "ii=%.2f, value =%f, int = %f, intPortion=%f, floor = %f, celing=%f",ii, var1, int(var1), IntPortion(var1), floor(var1), Ceiling(var1)); } } 2020-12-07 14:53:59 ii=368.39, value =1841.950000, int = 1841.000000, intPortion=1841.000000, floor = 1841.000000, celing=1842.000000 2020-12-07 14:53:59 ii=368.40, value =1842.000000, int = 1841.000000, intPortion=1841.000000, floor = 1841.000000, celing=1842.000000 2020-12-07 14:53:59 ii=368.41, value =1842.050000, int = 1842.000000, intPortion=1842.000000, floor = 1842.000000, celing=1843.000000
프로필 이미지

예스스탁 예스스탁 답변

2020-12-10 14:07:32

안녕하세요 예스스탁입니다. 첨부된 그림은 출력값을 모두 소숫점 13자리까지 출력해본 내용입니다. 적용한 식은 아래와 같습니다. var : ii(0); if BarIndex == 0 Then { For ii = 368 to 369+1 step 0.01 { var1 = ii /0.2; MessageLog("ii=%.13f, value =%.13f, int = %.13f, intPortion=%.13f, floor = %.13f, celing=%.13f",ii, var1, int(var1), IntPortion(var1), floor(var1), Ceiling(var1)); } } 출력하신 내용에서는 ii=368.39, value =1841.950000 ii=368.40, value =1842.000000 ii=368.41, value =1842.050000, 로 표시되지만 첨부된 그림과 같이 실제값은 아래와 같습니다. ii = 368.389999...,value = 1941.94999.. ii = 368.39999....,value = 1941.99999.. ii = 268.40999....,value = 1941.04999.. 이런 현상이 발생하는 원인은 cpu연산에서 10진수를 2진수로 변환해 계산후에 다시 10진수로 반환해서 발생하는 문제입니다. 따로 해결방법은 없고 사용하는 수식에서는 최종 int나 floor등에 값을 넣기 전에 해당 값을 적당한 자리에서 반올림을 해주고 이용하셔야 합니다. var : ii(0); if BarIndex == 0 Then { For ii = 368 to 369+1 step 0.01 { var1 = round(ii /0.2,3); MessageLog("ii=%.13f, value =%.13f, int = %.13f, intPortion=%.13f, floor = %.13f, celing=%.13f",ii, var1, int(var1), IntPortion(var1), floor(var1), Ceiling(var1)); } } 즐거운 하루되세요 > richon 님이 쓴 글입니다. > 제목 : Re : Re : int, floor, ceiling 함수 문의 > 정수값만 취하려고 int, floor, ceiling 함수를 이용해보려고 한 것입니다. 그런데, 아래와 같이 int(1842.000000)를 하면 제 상식으로는 1842가 나와야 할 것 같은데, 찍히는 것은 1841 입니다. 다시 한번 어떻게 처리해야 할지 부탁합니다. > 예스스탁 님이 쓴 글입니다. > 제목 : Re : int, floor, ceiling 함수 문의 > 안녕하세요 예스스탁입니다. int는 정수값만 취할때 사용합니다. int(1.1) --> 1 int(1.8) --> 1 round함수 사용하셔서 반올림 처리해 사용하셔야 합니다. round(1841.950000,0) --> 1842 즐거운 하루되세요 > richon 님이 쓴 글입니다. > 제목 : int, floor, ceiling 함수 문의 > 안녕하세요. 시스템 개발 중에 int, floor, ceiling 함수를 써야할 경우가 생겨서 개발중인데 원하는 값이 정확하게 산출되지 않아 점검해보니, 위의 함수가 제가 원하는 값으로 산출되지 않는 듯 합니다. int(1841.950000) --> 1841 int(1842.000000) --> 1841 이렇게 표시됩니다. 1. 두번째 값이 1842로 되어야 맞는 것 같은데 확인바랍니다. 2. 두번째 값이 1842로 산출되게 하려면 어떻게 해야 하는지도 알려주세요. 감사합니다. var : ii(0); if BarIndex == 0 Then { For ii = close to close+1 step 0.01 { var1 = ii /0.2; Print("intfloorceiling.txt", "ii=%.2f, value =%f, int = %f, intPortion=%f, floor = %f, celing=%f",ii, var1, int(var1), IntPortion(var1), floor(var1), Ceiling(var1)); } } 2020-12-07 14:53:59 ii=368.39, value =1841.950000, int = 1841.000000, intPortion=1841.000000, floor = 1841.000000, celing=1842.000000 2020-12-07 14:53:59 ii=368.40, value =1842.000000, int = 1841.000000, intPortion=1841.000000, floor = 1841.000000, celing=1842.000000 2020-12-07 14:53:59 ii=368.41, value =1842.050000, int = 1842.000000, intPortion=1842.000000, floor = 1842.000000, celing=1843.000000