7

私はこれに対する解決策を探し回ろうとしましたが、私は単にできません。バイト単位で計算されるlongのメガバイト表現を表示したいと思います。

Javaでは、ファイルオブジェクトで呼び出すことができるlength()というメソッドを取得しました。longに格納されているファイルサイズをバイト単位で返します。さて、私はそれを長くして、バイトではなくメガバイトに変換したいと思います。私が試しているファイルのサイズは161000バイトです。私が間違っていなければ、それは0.161メガバイトに相当します。だから私はbytes/100000を実行し、0.161を取得することを期待します。問題は私がそうしないことです。

Windows電卓、またはその他の電卓に行くと、アプリケーションはこれらの3つの小数を表示することができます。なぜこれができないのですか?結果をdoubleに格納しようとしましたが、0.0として出力されます。

編集:答えが見つかりました。wrmに感謝します:

long b = file.length(); double mb =(double)b /(1024 * 1024);

4

5 に答える 5

8

少しのコードで問題が明らかになるかもしれませんが、ある種の暗黙の変換が行われていると思います。このようなものが機能するはずです:

double result = (double)myLongVal / 1024.0;
于 2012-05-14T12:09:11.300 に答える
3

結果だけでなく、引数の1つをdoubleに変換する必要があります。

1000000.0代わりにで割ってみてください。

于 2012-05-14T12:07:48.713 に答える
2

間違っているのは、浮動小数点1を使用する必要がある積分除算を使用することです。

両方の演算子が整数(longとint)の場合、結果は不規則になります。つまり、小数部分はありません。

小数の除算が必要な場合は、少なくとも1つのopernadがハチの浮きまたはドゥールである必要があります。これは、リテラル数に.0を追加するか、型付き変数を使用することで取得できます。

また、longとdoubleは、その範囲内のすべての10進数を表すことができないため、常に正しい結果が得られるBigDecimalクラスを使用することをお勧めします。(精度には限界があります)

于 2012-05-14T12:18:38.760 に答える
1

DecimalFormatクラスを見て、結果を希望どおりにフォーマットすることができます。

double value = size / 1000.0;
DecimalFormat df = new DecimalFormat("#.##");    //This should print a number which is rounded to 2 decimal places.
String str = df.parse(value);
于 2012-05-14T12:08:16.767 に答える
0
Long size1 = size / 1000;
double value = (double) size1;
String str = String.valueOf(value);

これは私たちに魔法をかけました。

于 2016-01-01T19:55:13.723 に答える