일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- git rebase
- ethers websocket
- 스마트컨트렉트 함수이름 중복 호출
- 컨트렉트 동일한 함수이름 호출
- rust 기초
- multicall
- vue기초
- 체인의정석
- ethers typescript
- 스마트컨트렉트프록시
- ambiguous function description
- 오블완
- SBT표준
- chainlink 설명
- ethers
- 머신러닝기초
- 컨트렉트 배포 자동화
- 러스트 기초
- 티스토리챌린지
- Vue
- ethers v6
- 스마트컨트렉트테스트
- 러스트 기초 학습
- 스마트컨트렉트 예약어 함수이름 중복
- 프록시배포구조
- 스마트 컨트렉트 함수이름 중복
- Vue.js
- 러스트기초
- nest.js설명
- ethers type
Archives
- Today
- Total
체인의정석
스마트컨트렉트에서 소수점 처리하는법과 엑셀에서 검산하는 방법 및 유의점 본문
728x90
반응형
https://www.reddit.com/r/ethdev/comments/v2d972/how_to_calculate_percentage_in_solidity_80/
스마트 컨트렉트에서는 소수점 계산이 이루어지지 않는다.
따라서 특정 배수를 곱한 후 계산이 진행되게 되는데
uint256 z = x / 10000 * 1500;
이런 식으로 계산이 이루어진다고 보면 된다.
10000 만큼의 숫자를 기준으로 해서 100% 에다가 소수점 2번째 자리까지 표시를 기준으로 하면 10000 을 나누어 준 후에 %만큼을 곱해주면 된다.
그러나 계산 식이였던
(price/10000) * 수수료비율
과 엑셀 시트에서 계산한 검산 표가 달랐다.
그 이유는 바로 price/10000을 할때 나온 값이였다.
솔리디티에서는 해당 값을 계산 할때 소수점이 나오면 소수점을 없애버리는 식으로 계산하였기 때문에 소수점이 나온 결과에서 곱하기를 하지 않고 이를 정수형으로 바꿔서 곱하기를 한 결과가 나온것이고
엑셀에서는 소수점 기준으로 수수료 비율을 곱했기 때문에 다른 결과가 나왔다.
또한 소수첨 처리 방법도 엑셀의 기본값은 반올림 이지만 솔리디티는 확인 결과 소수점을 그냥 없애버리는 식으로 진행하고 반올림을 하지 않는걸 확인하였다.
결국 엑셀에서 계산할때도 price/10000를 정수형으로 먼저 내림으로 정수형으로 만들어서 계산한 후에 결과를 내야 똑같이 나오게 된다.
728x90
반응형
'블록체인 > Solidity' 카테고리의 다른 글
Solidity) 스마트컨트렉트에서 이더리움을 보내는 방법 (0) | 2022.08.10 |
---|---|
스마트컨트렉트 테스트에 Infinite Approve 적용하기 (0) | 2022.07.25 |
Solidity 0.8.0 버전에서 HashStruct안에 UUID 넣는 법 (0) | 2022.07.21 |
Solidity에서 자주 만나는 에러 "CompilerError: Stack too deep, try removing local variables." 그리고 에러에 대한 해결 방안 정리 , 이벤트 로그와 함수 입력값 구조체로 개수 줄이기 (0) | 2022.07.13 |
이벤트 로그에 구조체 데이터 넣기, 이벤트 로그 작성하기 (0) | 2022.07.13 |
Comments