最近、2 桁の 10 進数を表示する次のコードを見つけました。
val = ((int)(val*100.0))/100.0
結果は言われたとおりでしたが、その機能の背後にあるロジックがわかりません。誰か説明してくれませんか。ありがとうございました。
実際のコードが次のような場合:
float val = 3.141592654;
val = ((int)(val * 100.0)) / 100.0; // result would be 3.14
次に、その背後にあるロジックは、整数へのキャストが小数を切り捨てることです。したがって、10^n (n は小数点以下の桁数) を掛けてからキャストすると、小数点以下が n 桁右に移動し、残りの小数点以下が削除されます。次に、それを float にキャストし、10^n で割って目的の結果を取得します。
コードの重要な詳細が欠落していると思います-表示されたこのコードは、特に丸めではなく、何もしないと思います。このコードは、2 桁目以降をすべて切り捨てようとしているようです。
float データ型であると仮定すると、(切り捨てのために) 探しているものは次のとおりです。(より)簡単にするために分割しました:
float val = 42.1234;
int helpVal = val *100; //produces 4212, the rest will simply be cut off
float roundedVal = helpVal/100.0; //produces 42.12
短くするには、次の方法も使用できます。
float val = 42.1234;
float roundedVal = ((int) (val*100))/100.0;