【问题标题】:C# Incorrect Division of long numbers returns zero [duplicate]C#不正确的长数除法返回零[重复]
【发布时间】:2014-08-01 18:48:23
【问题描述】:

这是我的 C# 代码:

Int64 Free = Convert.ToInt64(number1); //has to be ToInt64
Int64 Size = Convert.ToInt64(number2); //has to be ToInt64
Int64 Total = (Free/Size) * 100;

免费是 35387133952,大小是 64419262464

手动划分 Free/Size 我得到 0.5493

问题:返回 0

而不是总回报 54.93

任何想法为什么会发生这种情况?

谢谢

【问题讨论】:

  • 整数除法!=浮点除法。维基百科:Division of Integers
  • 为什么一定要Int64?
  • 我确定这在此处的某处重复(可能不是Int64,但...)
  • 如果你需要坚持Int64,试试(Free * 100) / Size
  • number1number2 是什么类型?由于您将它们转换为整数

标签: c# casting division typeconverter int64


【解决方案1】:

您正在尝试将两个整数相除。这是预期的行为。

如果您需要获得浮点答案,则需要将值转换为浮点:

double Total = ((double)Free/(double)Size) * 100;

【讨论】:

  • 为了记录,您只需需要转换其中一个变量。但这是一个小问题。
  • @gunr2171 确实如此。
  • 是的,正如我在上面回答的那样:我会回答我自己的问题:我必须使用 double 并且这样做时有效:-)
【解决方案2】:

你正在划分整数,所以你得到一个整数。

如果 free 和 size 需要是 int64 的,您可以将它们转换为浮点数或双精度数等..

double total = ((double)Free/(double)Size) * 100

但没有办法将 54.93 存储到 int 中 .. 所以 Total 不能是 int

【讨论】:

  • 是的,正如我在上面回答的那样:我会回答我自己的问题:我必须使用 double 并且这样做时有效:-)
猜你喜欢
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
相关资源
最近更新 更多