如何将两个整数相除以获得双精度?
Posted
技术标签:
【中文标题】如何将两个整数相除以获得双精度?【英文标题】:How can I divide two integers to get a double? 【发布时间】:2010-10-14 05:54:11 【问题描述】:如何将两个整数相除以获得双精度数?
【问题讨论】:
假设这是在采访中被问到的——整数除法总是得到整数。您必须使用如下所示的类型转换。 不同类型的除法:整数、浮点数、小数-在Why integer division in c# returns an integer but not a float?讨论 【参考方案1】:你想投数字:
double num3 = (double)num1/(double)num2;
注意:如果 C# 中的任何参数是 double
,则使用 double
除法,结果为 double
。因此,以下方法也可以:
double num3 = (double)num1/num2;
更多信息见:
Dot Net Perls
【讨论】:
不知道这在 C# 中是否相同,但 C 只要求您转换第一个 - 它会自动将 double/int 设为 double。 @Pax,如果 C 或 C# 中的任何 args 是双精度,则使用双除法(导致双精度)。 小心不要这样做:-double num3 = (double)(num1/num2);
。这只会为您提供整数除法结果的双重表示!
假设您不需要额外的精度,是否有理由强制转换为 double
而不是 float
?我可以看到double
的问题,但我还是很好奇。
@KyleDelaney 只是因为在 C# 中我们通常使用 double
而不是 float
。当你写一个像var a = 1.0;
这样的变量时,这个1.0总是一个double
。我想这是主要原因。【参考方案2】:
补充@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 位
感谢@phuclv,已解决。我的意思是“空间分配”。您对 decimals
(96) 的精度是正确的,但 doubles
的精度是 52 bits of mantissa,而不是 53。
是的,尾数有 52 位,但还有一个隐藏位,导致有效位为 53 位。 Is it 52 or 53 bits of floating point precision?
Decimal.Divide 很棒!谢谢【参考方案3】:
将整数转换为双精度数。
【讨论】:
具体来说,您可以像这样将整数转换为双精度数:(double)myIntegerValue【参考方案4】:首先将其中一个转换为双精度。此表格适用于多种语言:
real_result = (int_numerator + 0.0) / int_denominator
【讨论】:
更容易做到...var result = 1.0 * a / b;
@Basic 有 100 种方法可以做到这一点。我更喜欢加法,因为它更快,尽管投射显然更快。【参考方案5】:
var firstNumber=5000,
secondeNumber=37;
var decimalResult = decimal.Divide(firstNumber,secondeNumber);
Console.WriteLine(decimalResult );
【讨论】:
这个问题似乎需要double
而不是decimal
。【参考方案6】:
var result = decimal.ToDouble(decimal.Divide(5, 2));
【讨论】:
5 = 第一个数字,2 = 第二个数字 您可以edit您的帖子添加信息。请不要在cmets中添加【参考方案7】:我已经阅读了大部分答案,我很确定这是无法实现的。无论您尝试将两个 int 划分为 double 还是 float 都不会发生。 但是您有很多方法可以进行计算,只需将它们转换为浮点数或双精度数即可。
【讨论】:
您好,欢迎来到 SO!请阅读tour 和How do I write a good answer? 请确保在您的答案中包含新信息(不在其他答案中)。【参考方案8】:最简单的方法是在整数中添加小数位。
例如:
var v1 = 1 / 30 //the result is 0
var v2 = 1.00 / 30.00 //the result is 0.033333333333333333
【讨论】:
以上是关于如何将两个整数相除以获得双精度?的主要内容,如果未能解决你的问题,请参考以下文章