gpt4 book ai didi

c# - 整数和 double 做除法

转载 作者:太空狗 更新时间:2023-10-29 23:59:25 24 4
gpt4 key购买 nike

简短版本:为什么我不必将 60 和 int 强制转换为 double ,这样如果我确实关心小数部分,我就可以将除法与另一个 double 一起使用?

长版本:我的老板在一行代码上叫我出去。我对其进行了测试,它工作得非常好,但他认为我有一个等待发生的错误。

int durationinseconds = 61;  // This is actually filled from a double.tryparse 
// from a string value out of an xml doc.
int durationinminutes = (int)Math.Ceiling((double)durationinseconds / 60);

我的代码应该从 XML 文档中获取秒数,然后计算出分钟数,总是四舍五入。 60 秒 = 1 分钟,61 秒 = 2 分钟,以此类推。

我测试了我的代码,但他坚持认为“/60”部分应该是“/60.0”。

我用 0、1、2、59、60、61、119、120、121、599、600、601 等测试了我的代码,它总是正确运行。

在我向他辩护之前,我基本上理解他为什么认为我需要将 60 强制转换为小数,因为他认为如果我使用 int 值,那么 double/int 将得到一个整数值,有效地删除小数部分。

但是,这里并没有发生这种情况,我无法准确解释原因。那么,这就是我的问题:如果我想使用小数部分,为什么在除以 double 时不必使用 60.0?

最佳答案

下面是相关的除法运算符:

public static double operator /(double x, double y)
public static int operator /(int x, int y)

存在从 intdouble 的隐式转换,但反之则不然……所以如果您将 int 除以int,您将使用整数形式...但如果任一操作数是 double ,它将使用 double 形式。

没有必要让两个操作数都变成double - 但是如果你把除数操作数变成double而不是转换,你的代码至少会更短:

int durationInMinutes = (int) Math.Ceiling(durationInSeconds / 60.0);

我个人觉得这样更容易阅读...但这是个人选择。

如果您想向您的老板证明它确实在进行浮点除法,请在您的代码中使用 iladsm 或反射器(在 IL 模式下)——它会显示一个 ldc.r8 常量指令,表示 double 值。

关于c# - 整数和 double 做除法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3195060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com