체인의정석

스마트컨트렉트에서 소수점 처리하는법과 엑셀에서 검산하는 방법 및 유의점 본문

블록체인/Solidity

스마트컨트렉트에서 소수점 처리하는법과 엑셀에서 검산하는 방법 및 유의점

체인의정석 2022. 7. 25. 14:26
728x90
반응형

https://www.reddit.com/r/ethdev/comments/v2d972/how_to_calculate_percentage_in_solidity_80/

 

How to calculate percentage in Solidity ^8.0?

Hi there, I read a lot of posts regarding this and before the Solidity version 8.0 it seems that would be very complicated to calculate...

www.reddit.com

스마트 컨트렉트에서는 소수점 계산이 이루어지지 않는다.

따라서 특정 배수를 곱한 후 계산이 진행되게 되는데

uint256 z = x / 10000 * 1500;

이런 식으로 계산이 이루어진다고 보면 된다.

10000 만큼의 숫자를 기준으로 해서 100% 에다가 소수점 2번째 자리까지 표시를 기준으로 하면 10000 을 나누어 준 후에 %만큼을 곱해주면 된다.

 

그러나 계산 식이였던 

(price/10000) * 수수료비율

과 엑셀 시트에서 계산한 검산 표가 달랐다.

 

그 이유는 바로 price/10000을 할때 나온 값이였다.

솔리디티에서는 해당 값을 계산 할때 소수점이 나오면 소수점을 없애버리는 식으로 계산하였기 때문에 소수점이 나온 결과에서 곱하기를 하지 않고 이를 정수형으로 바꿔서 곱하기를 한 결과가 나온것이고

 

엑셀에서는 소수점 기준으로 수수료 비율을 곱했기 때문에 다른 결과가 나왔다.

또한 소수첨 처리 방법도 엑셀의 기본값은 반올림 이지만 솔리디티는 확인 결과 소수점을 그냥 없애버리는 식으로 진행하고 반올림을 하지 않는걸 확인하였다.

 

결국 엑셀에서 계산할때도 price/10000를 정수형으로 먼저 내림으로 정수형으로 만들어서 계산한 후에 결과를 내야 똑같이 나오게 된다.

 

728x90
반응형
Comments