2011-07-21 10 views
2

この値を格納するデータ型が見つからないことを除いて、計算例は2/4 = 0.5です。計算を行うたびに0と表示されます。C# - 値0.5のデータ型

誰もが何か提案がありますか?

答えて

12

doubleまたはdecimalのいずれかが問題なく動作します。しかし

、あなただけ書いた場合:

// Wrong 
double x = 2/4; 

、それはまだ整数除算を使用します - 除算演算子のオペランドの両方がタイプintであるため。

あなたはどちらかにキャストするか、または両方のオペランドが倍増、またはそれらのいずれかまたは両方のための二重のリテラルを使用する:doubledecimal両方が種類浮動小数点であることを

// Any of these... 
double x = (double) 2/4; 
double x = 2/(double) 4; 
double x = (double) 2/(double) 4; 
double x = 2.0/4; 
double x = 2/4.0; 
double x = 2.0/4.0; 
double x = 2d/4; 
double x = 2/4d; 
double x = 2d/4d; 

注意。それらは任意の有理数(分数)を表すものではありません。たとえば、どちらも正確に1/3を表すことはできません。有理数型が必要な場合は、独自に記述するか、サードパーティの実装を探す必要があります。

+1

を説明するのに役立ちます希望は、私は同様にリテラルサフィックスバリエーションを追加しました。 – Thorarin

+0

@Thorarin:ありがとう非常に:) –

4

少なくとも除数の1または配当が浮動数であることを確認してください:

double d = 2/4.0; 
Console.WriteLine(d): // Writes: 0.5 
3

使用2/4.0浮動小数点演算を使用するように強制します。そして、あなたは、二重に格納することができます。

double d = 2/4.0; 

あなたは、変数を持っている実際のコードでは、doubleに除数をキャストした場合:

int i = 2; 
int j = 4; 
double d = i/(double)j; 
1

をあなたはキャストすることができ、

double value = (double)2/4; 

を小数点を入力すると

double value = 2.0/4.0; 
1

フロートまたはダブルのいずれかでジョブが実行されます。

float x = 2f/4f; 
double x = 2d/4d; 

あなたが適切な文字(FまたはD)を付加することにより、フロートやダブルスのように一定の値を指定することができます。

重要なことは、最初のデータ型(左側)が結果のデータ型を決定することです。 EDIT:フロート/ダブルだから

に動作します...

var x = 2/4;//x is int (0) 
var x = 2f/4;//x is float (0.5f) 
var x 2d/4;//x is double (0.5d) 

C#は自動的にダブルそう/ float型にint型に変換されますされ実際に、この場合はどちらかの値...とにかく

float x = 2/4;//result type is int, but gets stored as convert float 

、あなたの例では、可能性の全体のホストを提供しているので、いくつかの事柄