2つの整数を除算してdoubleを取得するにはどうすればよいですか?


282

2つの整数を除算してdoubleを取得するにはどうすればよいですか?


10
これがインタビューで尋ねられたとすると、整数の除算は常に整数になります。以下に示すような型キャストを使用する必要があります。
Sesh

2
さまざまな種類の除算:Integer、Floating-point、Decimal -discussed in なぜc#の整数除算は整数を返すが浮動小数点を返さないのですか?
Michael Freidgeim 2017年

回答:


460

あなたは数字をキャストしたい:

double num3 = (double)num1/(double)num2;

注:C#の引数のいずれかがaのdouble場合、double除算が使用され、結果はになりdoubleます。したがって、以下も機能します。

double num3 = (double)num1/num2;

詳細については、以下を参照してください。

ドットネットPerl


3
これがC#でも同じかどうかはわかりませんが、Cでは最初にキャストする必要があるだけです。自動的にdouble / intがdoubleになります。
paxdiablo 2009年

4
@ Pax、CまたはC#の引数のいずれかがdoubleの場合、double除算が使用されます(結果はdoubleになります)。
ストレッジャー2009年

32
これを行わないように注意してください:- double num3 = (double)(num1/num2);。これは、整数除算の結果の二重表現を提供するだけです!
Lonely Coder

追加の精度が必要ない場合、double代わりにキャストする理由はありfloatますか?質問が必要なのはわかりますが、doubleとにかく興味があります。
カイルデラニー

@KyleDelaney C#では通常使用するものでdoubleあり、使用しないものfloatです。のようvar a = 1.0;に変数を書き込む場合、この1.0は常にdoubleです。これが主な理由だと思います。
this.myself

31

@NoahDの回答を補完する

精度を高めるには、10進数にキャストします。

(decimal)100/863
//0.1158748551564310544611819235

または:

Decimal.Divide(100, 863)
//0.1158748551564310544611819235

doubleは64ビットを割り当てて表現されますが、10進数は128を使用します

(double)100/863
//0.11587485515643106

「精度」の詳細説明

浮動小数点バイナリでの表現とその精度についての詳細を見て取るこの記事ジョン彼が語るスキートからfloatsdoublesし、この1、彼は語りますdecimals


2
違う!double53ビットの精度を持ち、それは2進浮動小数点フォーマットですdecimalが、... 96ビットの精度を持つ10進数です。したがってdouble、10進数で15〜17桁、28〜29桁で10桁まで正確です(2倍の精度ではありませんdouble)。さらに重要なのは、decimal実際には128ビットのうち102ビットのみを使用することです
phuclv 2018

ありがとう@phuclv、それを修正しました。「スペース割り当て」という意味です。あなたは右の精度についてであったdecimals(96)が、doubles有する仮数の52ビットではなく53
fabriciorissetto

1
はい、仮数には52ビットがありますが、非表示のビットが残っているため、53ビットの仮数になります。52ビットまたは53ビットの浮動小数点精度ですか?
phuclv 2018

Decimal.Divideは素晴らしかったです!Thx
Ricardo G Saraiva


5

最初にそれらの1つをdoubleに変換します。このフォームは多くの言語で機能します。

 real_result = (int_numerator + 0.0) / int_denominator

1
簡単にするだけです...var result = 1.0 * a / b;
基本的な

@Basicには、100通りの方法があります。キャスティングは明らかにまだ速いですが、私はそれがより速いという理由だけで追加を好みます。
マークランサム

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.