【发布时间】:2010-10-14 05:54:11
【问题描述】:
如何将两个整数相除以获得双精度数?
【问题讨论】:
-
假设这是在采访中被问到的——整数除法总是得到整数。您必须使用如下所示的类型转换。
-
不同类型的除法:整数、浮点数、小数-在Why integer division in c# returns an integer but not a float?讨论
如何将两个整数相除以获得双精度数?
【问题讨论】:
你想投数字:
double num3 = (double)num1/(double)num2;
注意:如果 C# 中的任何参数是 double,则使用 double 除法,结果为 double。因此,以下方法也可以:
double num3 = (double)num1/num2;
更多信息见:
【讨论】:
double num3 = (double)(num1/num2);。这只会为您提供整数除法结果的双重表示!
double 而不是 float?我可以看到double 的问题,但我还是很好奇。
double 而不是 float。当你写一个像var a = 1.0;这样的变量时,这个1.0总是一个double。我想这是主要原因。
补充@NoahD 的回答
为了获得更高的精度,您可以转换为小数:
(decimal)100/863
//0.1158748551564310544611819235
或者:
Decimal.Divide(100, 863)
//0.1158748551564310544611819235
双数表示分配 64 位,而十进制使用 128
(double)100/863
//0.11587485515643106
有关二进制浮点表示及其精度的更多详细信息,请查看 Jon Skeet 的 this article,他谈到了 floats 和 doubles 和 this one,他谈到了 decimals。
【讨论】:
double 的精度为 53 位,它是 binary 浮点格式,而 decimal 是……当然,96 bits of precision 是十进制的。所以double 精确到 15-17 个十进制数字和 28-29 个十进制数字(而不是 double 精度的两倍)。更重要的是decimal 实际上只使用了 128 位中的 102 位
decimals (96) 的精度是正确的,但 doubles 的精度是 52 bits of mantissa,而不是 53。
将整数转换为双精度数。
【讨论】:
首先将其中一个转换为双精度。此表格适用于多种语言:
real_result = (int_numerator + 0.0) / int_denominator
【讨论】:
var result = 1.0 * a / b;
var firstNumber=5000,
secondeNumber=37;
var decimalResult = decimal.Divide(firstNumber,secondeNumber);
Console.WriteLine(decimalResult );
【讨论】:
double 而不是decimal。
var result = decimal.ToDouble(decimal.Divide(5, 2));
【讨论】:
我已经阅读了大部分答案,我很确定这是无法实现的。无论您尝试将两个 int 划分为 double 还是 float 都不会发生。 但是您有很多方法可以进行计算,只需将它们转换为浮点数或双精度数即可。
【讨论】:
最简单的方法是在整数中添加小数位。
例如:
var v1 = 1 / 30 //the result is 0
var v2 = 1.00 / 30.00 //the result is 0.033333333333333333
【讨论】: