마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

double을 String으로 바꾸었을 때 소숫점이 이상해요

0 추천

.

int run02_exp = 0;
 run02_exp += weight02_table[lvf]-weight02_table[lvn];                                 //필요 exp 구해서 저장

run02_exp 에 레벨업에 필요한 exp의 총량을 구해서 넣습니다.

 

double result_nanugi;                   //횟수 저장할 double


if (run02_mvp.isChecked()){
    if (run02_lea.isChecked()){ result_nanugi = run02_exp / (764*9); }
    else { result_nanugi = run02_exp / (637*9); }}
else {
    if (run02_lea.isChecked()) { result_nanugi = run02_exp / (588*9); }
    else { result_nanugi = run02_exp / (490*9); }}

2개의 체크박스의 체크 여부에 따라 4가지의 각각 다른 수로 경험치 필요량을 나누고, result_nanugi 에 저장합니다.

 

String ans02 = String.format("%.2f",result_nanugi);
ans02 += "번 입니다.";
     TextView res02alim = (TextView) findViewById(R.id.run02_sualarm);
     res02alim.setText(String.valueOf(ans02));

ans에 실수 형태인 result_nanugi에서 소수점 2자리까지를 잘라서 표시한 후 "번 입니다"라고 출력합니다.

 

 

////여기서 이상한 것이, result_nanugi 의 소수점 두자리까지를 표시해야 하는데, 자꾸 소수점이 표시되지 않습니다. 정수 부분은 정확하게 표시가 되는데, 뒤에 소수점이 제대로 나오지 않고, .00 이라고만 뜹니다..

코딩이 잘못된건가 싶어, result_nanugi에 123.4567을 넣고 테스트 해보았습니다만, 그때는 123.46이라고 소수점 2째자리에서 반올림 한 듯이 잘 표시가 되더군요.. 소수점이 너무 길어서 그런 건가요? 어떻게 해야 할지 감이 안잡혀서 여쭤봅니다... 고수님들 도와주셔요 ㅠㅠ

우엥넘어려운것TT (350 포인트) 님이 2018년 5월 4일 질문

1개의 답변

+1 추천
 
채택된 답변
result_nanugi = run02_exp / (764*9); 라면,

1.  764*9 를 연산한 6876 값을 구하고,

2. run02_exp/6876 를 수행

3. result_nanugi 에 2의 값을 대입

과정을 시키는데, 2번 연산이 int간 연산이라 int로 계산되서  누락되는 겁니다.

result_nanugi = ((double)run02_exp) /(double) (764*9);

혹은

result_nanugi = (1.0 * run02_exp) / (1.0* 764*9);

와 같이 명시적으로 double로 값을 변경 해 주시면 제대로 나올 겁니다.
익명사용자 님이 2018년 5월 4일 답변
우엥넘어려운것TT님이 2018년 5월 4일 채택됨
세상에 말끔하게 해결되었어요! 저 나누기 값이 애초에 정수로 저장되어서 그런 오류가 났던 거였군요 ㅠㅠㅠ 친절한 답변 감사드립니다 ㅠㅠㅠ
...