블로그 이미지
매몰

모바일 어플리케이션 개발 1인 기업 고영진모바일입니다. 저와 함께 맛깔스러운 앱을 만들어 보아요~

Rss feed Tistory
개발/php, javascript 2018.11.26 10:09

round()를 5의 배수로도 반올림 해보자



왜 반올림은 0으로만 할까?

0말고 다른수로도 반올림 해보는건 어떨까?


라는 생각을 가끔씩 해봤는데.. 솔직히 별 필요성을 느끼지 못했었다.

그런데 주식 관련한 로보어드바이저를 만들면서 필요해졌다. 호가를 찍을때 5단위가 되기 때문이다.


아래와 같이 php의 반올림 함수인 round()를 이용하여 5의 배수로 반올림 해주는 코드를 짜봤다.


원리는 굳이 설명안해도 될만큼 간단하다. 여기서 볼것은 round() 함수의 두번째 인수인 반올림 자릿수도 고려한다는 사실이다. 이러한 편리한 기능은 살려놔야 코딩하는 재미가 있다ㅎㅎ




function roundCenter($price, $precision) {

//지정한 자릿수로 반올림 (1)

$round = round($price, $precision);

//지정한 자릿수 이하가 5가 되도록 변경 (2)

$square = -$precision;

$digit = pow(10, $square);

$center = (floor($price / $digit) * $digit) + (5 * pow(10, $square -1));

//(1)과 (2)를 원래 숫자와 비교하여 더 가까운 것을 택함

return abs($price - $round) < abs($price - $center) ? $round : $center;

}




결과값으로 검증해 보자...


echo roundCenter(573424.2517, 3).'<br />';

echo roundCenter(573424.2517, 2).'<br />';

echo roundCenter(573424.2517, 1).'<br />';

echo roundCenter(573424.2517, 0).'<br />';

echo roundCenter(573424.2517, -1).'<br />';

echo roundCenter(573424.2517, -2).'<br />';

echo roundCenter(573424.2517, -3).'<br />';




출력...


573424.2515
573424.25
573424.25
573424.5
573425
573400
573500




위에서 보듯이 지정 자릿수가 3이면 소수점 3째짜리까지 나오거나 소수점 4째자리가 5인 수가 나온다.




수제앱장인


 

 

CEO

Developer

S/W Enginner

고영진


실패만 하고 있어도 꿈을 포기하지 않는 남자
제가 직접 경험하고 습득한 지식을 위주로 올릴게요

사업자 정보 표시
고영진모바일 | 고영진 | 서울특별시 관악구 낙성대동 서울대연구공원 SK상생혁신센터 | 사업자 등록번호 : 109-11-82076 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2010-서울강서-0217호 | 사이버몰의 이용약관 바로가기
개발/php, javascript 2013.11.11 09:14

php의 json_decode에서 null이 나올경우 살펴봐야 할점

php 5.2.1 이상이면 json이 기본으로 내장되어 있죠...


그중 json_decode 함수는 json문자열을 php배열을 바꾸어주는 기능을 합니다...


그런데 변환이 잘 되다가도 가끔씩 배열 대신 null이 나오는 경우가 있는데요...


제가 직접 php로 웹서버를 제작중에 null이 발생했던 경우는 다음과 같이 2가지 였습니다...




첫번째는 json문자열에 \"이 포함되어 있을때입니다...

예를 들어 {\"name\":\"youngjin\"} 문자열을 json_decode로 바꾸고자 할때 null이 발생합니다...

이경우는 클라이언트나 다른 서버에서 json문자열형태로 파라미터값을 받을때 종종 나타납니다...


해결책은 당연히 다음과 같이 \"를 "로 바꾸어주면 되겠죠^^




function getJsonText($jsontext) {

return str_replace("\\\"", "\"", $jsontext);

}


$codes = json_decode(getJsonText($_POST[code]));





두번째는 php배열을 그대로 json_decode로 변환할려고 할때입니다...

이것은 java에서 JSONObject나 JSONArray 객체의 편의성때문에 햇갈려서 실수를 하는 경우인데요... 적어도 저는 그랬습니다ㅎㅎㅎ

java의 json객체는 하위 json객체를 바로 열람할수 있지만 php는 아직 그런기능이 없는듯 합니다(아니면 제가 모르는것일수도;;;)


어잿든 하위 json객체를 열람할때는 다음과 같이 문자열로 바꿔준다음 다시 배열로 바꾸어주어야 하네요^^




$json_object_array = json_decode($text, true);

$sub_json_object_array = json_decode(json_encode($json_array), true);

 



  



 

 매몰: 고영진 대표/개발자


 고영진모바일 1인기업의 하나뿐인 사람. 

 그밖에 동반자 노트북,스마트폰 

     실패만 하고 있어도 꿈을 포기하지 않는 남자. 

     제가 직접 경험하고 습득한 지식을 위주로 올릴게요. 






사업자 정보 표시
고영진모바일 | 고영진 | 서울특별시 관악구 낙성대동 서울대연구공원 SK상생혁신센터 | 사업자 등록번호 : 109-11-82076 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2010-서울강서-0217호 | 사이버몰의 이용약관 바로가기
JSON, php
개발/php, javascript 2013.09.02 14:54

javascript 로 애니메이션 움직임 만들기

jquery를 이용하면 웹에서도 멋진 동적 애니메이션을 쉽게 넣을수 있다.


하지만 이런 jquery를 가능하게 하는것은 역시 javascript다. 

당연한말이지만 jquery는 javascript 기반의 라이브러리이기 때문이다...


즉, jquery로 할수 있는 모든 동작은 javascript로도 가능하는것이다.

조금 어렵지만 말이다.


하지만 기본을 알면 무한발전이 가능한법~ㅎㅎ

나는 jquery없이 javascript로 멋진 애니메이션을 만들어보기로 했다..


jquery라는 쉬운 도구가 있는데 왜 굳이 javascript로 뻘짓을 하느냐고 할수도 있겠지만 난 원래 뻘짓을 좋아한다ㅎㅎㅎ


애니메이션의 가장 기본적인 구조는 반복이다...

게임엔진이 아닌 실제 코딩으로 게임을 만들어 본 사람은 알겠지만 게임과 같은 애니메이션동작은 다 쓰레드에 의한 반복구조이다...


이는 javascript에서도 예외는 아니다.


나는 이구조를 위해서 setTimeout(function, time)라는 기본함수를 이용했다.

(물론 나만 사용하는 방법은 아니다ㅎㅎ)


function moveText(id, src, textid, left) {

if(navigator.appName == "Netscape") {

var object = document.getElementById(textid);

if(changeImage(id, src)) {

var margin = 100;

function move() {

if ((margin+=5) < 200) {

if(left)

object.style.marginRight = margin + 'px';

else

object.style.marginLeft = margin + 'px';

setTimeout(move, 10);

}

}

document.getElementById('menutext').style.visibility = "visible";

object.style.visibility = "visible";

move();

}

}

else

changeImage(id, src);

}


위 내용은 실제 내 홈페이지에서 마우스를 아이콘 위에 가져갈때 글자가 이동하는 소스이다

http://www.gyjmobile.com


이 함수가 호출되면 안에 있는 move() 함수가 실행된다..

move()는 margin을 5 증가시켜 객체를 이동시킨다. 그리고 setTimeout(move, 10)을 호출해 move()함수를 0.01초후 다시 실행시킨다(재귀함수).

이 반복은 margin이 200이 될때까지만 계속된다. 


즉, 0에서 200까지 이동하게 되는것이다~

이렇듯 원리는 아주 간단하다... 하지만 난 이걸 할려고 하루동안 모니터만 보고 있었다ㅎㅎ


참고로 익스플로러에서 동작이 부자연스러워 분기문으로 빼버렸다...


익스플로러는 안되는게 너무 많으니ㅎㅎ 크롬이나 사파리에서 해보길 권장해요~


 





 

 매몰: 고영진 대표/개발자


 고영진모바일 1인기업의 하나뿐인 사람. 

 그밖에 동반자 노트북,스마트폰 

     실패만 하고 있어도 꿈을 포기하지 않는 남자. 

     제가 직접 경험하고 습득한 지식을 위주로 올릴게요. 







사업자 정보 표시
고영진모바일 | 고영진 | 서울특별시 관악구 낙성대동 서울대연구공원 SK상생혁신센터 | 사업자 등록번호 : 109-11-82076 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2010-서울강서-0217호 | 사이버몰의 이용약관 바로가기
TOTAL 69,579 TODAY 8