0

最近、2 桁の 10 進数を表示する次のコードを見つけました。

val = ((int)(val*100.0))/100.0

結果は言われたとおりでしたが、その機能の背後にあるロジックがわかりません。誰か説明してくれませんか。ありがとうございました。

4

2 に答える 2

3

実際のコードが次のような場合:

float val = 3.141592654;
val = ((int)(val * 100.0)) / 100.0; // result would be 3.14

次に、その背後にあるロジックは、整数へのキャストが小数を切り捨てることです。したがって、10^n (n は小数点以下の桁数) を掛けてからキャストすると、小数点以下が n 桁右に移動し、残りの小数点以下が削除されます。次に、それを float にキャストし、10^n で割って目的の結果を取得します。

于 2013-08-19T14:31:18.637 に答える
1

コードの重要な詳細が欠落していると思います-表示されたこのコードは、特に丸めではなく、何もしないと思います。このコードは、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;
于 2013-08-19T14:29:46.550 に答える