如何将两个整数相除以获得双精度?

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,他谈到了 floatsdoubles 和 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

【讨论】:

以上是关于如何将两个整数相除以获得双精度?的主要内容,如果未能解决你的问题,请参考以下文章

除以双精度返回0

是否可以保真地将浮点双精度数往返于两个十进制整数?

是否可以保真地将浮点双精度数往返于两个十进制整数?

获得两个双精度数组绝对差之和的有效方法

高精度计算 除法 高精除以低精

在 C 中,如何将浮点数或双精度数除以 2 的 i 次幂?