2017-01-20 20 views
0

2桁の数字を分割し、2つの異なる変数に結果を得ようとします。特定の番号の問題がありました:232桁の数字を分割する

int root = 23; 
float div = (float)root/10.0; // div = 23.0/10.0 = 2.3 

int left = (int)div; // left = 2 
int right = ((float)div - (float)left) * 10.0; // right = (2.3 - 2) * 10.0 = 0.3 * 10.0 = 3 

printf("%d", right); // 2, why ? 

浮動小数点演算が多く、最終結果にいくつかの問題があります。私は何かを見逃したり、見つけたりしなかったのですか?

+5

OMG、 'A =ルート/ 10。 b = root%10; ' – 0andriy

+0

10.0が時々intとして解釈されるので、2番目の数値を変換することによって解決される同様の問題があったことを少し思い出します - 書き直してみてください:' float div =(float)root /(浮動)10.0; // div = 23.0/10.0 = 2.3' – pytomaniaq

+1

注意事項として、浮動小数点数は正確ではないので通常は避けることをお勧めします。 –

答えて

6

0.3はバイナリで正確に表現されない可能性がありますので、最終的には2.9999 ...となり、intに変換すると2になります。代わり

int root = 23; 
int left = root/10; 
int right = root % 10; 
+0

これは私が持っていたがっている説明です。したがって、 '%'は解決策です。ありがとう! –

関連する問題