BigNumber는 큰 수 처리에 정말 좋은 라이브러리지만
초보자를 위한 라이브러리는 아닌 듯.
참조1)
loop 바깥에서
BigNumber a="1234567890.0987654321"; 로 전역선언후 시리얼로 출력해 보면
a=1234567890
로 나온다.
BigNumber a=1234567890.0987654321; 로 따옴표를 떼면
a=32767로 나옴.
특이하게도
BigNumber a='1234567890.0987654321'; 로 홑따옴표를 붙이면
a=12849가 된다.
BigNumber a="1234567890.0987654321"; 를 loop 안쪽에서 선언하면
a=1234567890.0987654321 로 제대로 나온다.
BigNumber a = "123556.2342" 형태나 BigNumber a ("143563245.21345245") 형태로 사용해야 한다.
이 라이브러리는 숫자를 String 취급하는 것 같은데
그렇다고 실제로 String으로 생각하고 스케치를 하면 오류를 뿜는다.
문자열 길이를 측정하는 length() 같은 함수를 쓸 수 없다.
참조2)
LED 디스플레이에 숫자 표기를 정확히 하기 위해서는 숫자의 자리수가 얼마인지 셀 수 있어야 한다.
디스플레이의 자릿수를 벗어나면 정리해 주어야 한다.
숫자의 길이를 측정하려면
char s = n.toString(); //n을 문자열로 치환하여 s에 저장
length = strlen(s); //s의 길이를 구하여 length에 저장
같은 식으로 사용해야 한다.
하지만 이 경우 소수점이 포함되어 계산되므로
1 -> 1자리수
1.00 -> 4자리수 로 계산되는 문제가 있다.
문제1)
1이상의 수는 어떻게든 처리가 가능하다.
하지만 1 미만의 수는 소수점 때문에 처리가 매우 곤란해진다.
1 = 1.0000000 과 같이 나오는데 이 경우 0.000000을 어떻게 처리해야 하는가?
문제2)
소수점 이하의 수는 자리수를 어떻게 계산하는가?
1 이상의 수는 10씩 나눠가면서 그 수가 0보다 큰지 아닌지 체크하고
0보다 크면 다시 10 나누는 식으로 자릿수를 계산할 수 있다.
456
10을 나눈다. = 45.6 (1회)
1보다 큰가? ->yes
10을 나눈다 = 4.56 (2회)
1보다 큰가? ->yes
10을 나눈다 = 0.456 (3회)
1보다 큰가? ->no
3회 반복했으므로 자릿수는 3
하지만 1보다 작은 수는 어떻게 처리해야 하는가?
ex)0.000123
추측1)
123.456을 123 과 0.456으로 분리할 수 있다면 위의 문제들을 해결하기 쉬울 것 같다.
분리하는 방법은?
http://cafe.naver.com/arduinostory/52325
https://arduino.stackexchange.com/questions/1013/how-do-i-split-an-incoming-string
http://cafe.naver.com/arduinostory/27858