Programming/Kotlin

[Kotlin] Error: Non-terminating decimal expansion; no exact representable decimal result. ์˜ค๋ฅ˜

yuri lee 2023. 1. 2. 22:33
๋ฐ˜์‘ํ˜•

Intro

kotlin ๊ธฐ๋ฐ˜์˜ ์กฐํšŒ API๋ฅผ ๋งŒ๋“ค๋˜ ๋„์ค‘ ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

Non-terminating decimal expansion; no exact representable decimal result.

 

 

Why?

๊ฐ’์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด divide๋ฅผ ํ†ตํ•ด ๋‘ BigDecimal ๊ฐ’์„ ๋‚˜๋ˆ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช… ์—๋Ÿฌ๊ฐ€ ์—†์—ˆ๋Š”๋ฐ, ์™œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ๊ตฌ๊ธ€๋ง์„ ํ•˜์—ฌ ๊ฒ€์ƒ‰ํ•ด๋ดค์Šต๋‹ˆ๋‹ค. BigDecimal ๋‚˜๋ˆ„๊ธฐ๋ฅผ ํ•  ๊ฒฝ์šฐ ์ •ํ™•ํ•œ ๊ฐ’์ด ๋–จ์–ด์ง€์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ์˜ "Non-terminating decimal expansion; no exact representable decimal result." ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

๊ธฐ์กด ํ…Œ์ŠคํŠธ ํ•˜๋˜ ๋ฐ์ดํ„ฐ์—์„œ๋Š” ์ •ํ™•ํžˆ ๊ฐ’์ด ๋–จ์–ด์ ธ ๋‚˜๋ˆ ์กŒ๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์ง€๋งŒ, ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์…‹์—์„œ๋Š” ๊ฐ’์ด ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š์•„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. 

How to solve the problem

divide ์‹œ ํ•„์ˆ˜๋กœ ์ž๋ฆฌ์ˆ˜์™€ ๊ฒฐ๊ณผ์…‹์„ ์ง€์ •ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

bigDecimal.divide(value, 2, BigDecimal.ROUND_CEILING);
  • ์˜ฌ๋ฆผ : ROUND_CEILING
  • ๋‚ด๋ฆผ : ROUND_FLOOR
  • ๋ฐ˜์˜ฌ๋ฆผ : ROUND_HALF_UP
  • ๋ฐ˜๋‚ด๋ฆผ : ROUND_HALF_DOWN

 


https://development-storage.tistory.com/3

https://eclipse4j.tistory.com/189

https://kingjakeu.github.io/java/2020/12/23/bigdecimal/

๋ฐ˜์‘ํ˜•