【问题标题】:How can I divide two integers to get a double?如何将两个整数相除以获得双精度?
【发布时间】:2010-10-14 05:54:11
【问题描述】:

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

【问题讨论】:

标签: c# math int double


【解决方案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,他谈到了 floatsdoublesthis 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 都不会发生。 但是您有很多方法可以进行计算,只需将它们转换为浮点数或双精度数即可。

【讨论】:

【解决方案8】:

最简单的方法是在整数中添加小数位。

例如:

var v1 = 1 / 30 //the result is 0
var v2 = 1.00 / 30.00 //the result is 0.033333333333333333

【讨论】:

    猜你喜欢
    • 2019-08-13
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    相关资源
    最近更新 更多