如何将两个整数除以得到一个双精度?

leo*_*ora 252 c# math

如何将两个整数除以得到一个双精度?

Noa*_*ahD 412

你想要输出数字:

double num3 = (double)num1/(double)num2;
Run Code Online (Sandbox Code Playgroud)

注意:如果C#中的任何参数是a double,double则使用除以得到a的除法double.所以,以下也适用:

double num3 = (double)num1/num2;
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅

Dot Net Perls

  • 注意不要这样做: - `double num3 =(double)(num1/num2);`.这只会给你一个整数除法结果的双重表示! (26认同)
  • @Pax,如果C或C#中的任何args是double,则使用双倍除法(导致double). (4认同)
  • 不知道C#中是否相同,但C只需要你先抛出它 - 它会自动使double/int成为double. (3认同)

fab*_*tto 27

补充@NoahD的答案

要获得更高的精度,可以转换为十进制:

(decimal)100/863
//0.1158748551564310544611819235
Run Code Online (Sandbox Code Playgroud)

要么:

Decimal.Divide(100, 863)
//0.1158748551564310544611819235
Run Code Online (Sandbox Code Playgroud)

Double表示分配64位,而decimal表示128

(double)100/863
//0.11587485515643106
Run Code Online (Sandbox Code Playgroud)

深入解释"精确"

有关二进制浮点表示,精度更多的细节来看看这篇文章从乔恩斯基特,他谈到floatsdoubles这一个地方他谈到decimals.

  • 错误的!`double` 的精度为 53 位,它是一种 **二进制** 浮点格式,而 `decimal` 是一个......十进制,当然,具有 [96 位精度](https:// stackoverflow.com/q/3801440/995714)。所以 `double` 精确到 ~15-17 位十进制数字和十进制 28-29 位数字(而不是 `double` 精度的两倍)。更重要的是 `decimal` 实际上只使用了 128 位中的 102 位 (2认同)

Ste*_*ton 10

将整数转换成双打.


Mar*_*som 5

将其中一个转换为双倍优先.此表单适用于多种语言:

 real_result = (int_numerator + 0.0) / int_denominator
Run Code Online (Sandbox Code Playgroud)

  • 更容易做... `var result = 1.0 * a / b;` (2认同)