Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 除以两个整数不会返回预期结果_C# - Fatal编程技术网

C# 除以两个整数不会返回预期结果

C# 除以两个整数不会返回预期结果,c#,C#,我目前正在编写一个程序,需要实时显示的预览,但预览当然是缩小的。但是,当我缩小PictureBox时,大小不正确。为了使刻度正确,宽度和高度的比例必须为4:3。代码如下: private void FindOptimalRes(PictureBox picBox) { double h = Height / 4; double ratio = 4 / 3; picBox.Size = new Size((int)(h * ratio), (int)h); } 在测试中,

我目前正在编写一个程序,需要实时显示的预览,但预览当然是缩小的。但是,当我缩小PictureBox时,大小不正确。为了使刻度正确,宽度和高度的比例必须为4:3。代码如下:

private void FindOptimalRes(PictureBox picBox)
{
    double h = Height / 4;
    double ratio = 4 / 3;
    picBox.Size = new Size((int)(h * ratio), (int)h);
}

在测试中,高度表单的高度为400,因此,新尺寸的宽度应为133。但它总是被调整到100×100!为什么?C的数学是正确的。对正在做的事情的理解是。。缺失:-

int/int类型的表达式4/3将计算为整数值1,因为它使用整数除法。两个操作数都是整数。然后,结果1在赋值时被隐式强制为双精度值

另一方面,4d/3将起作用,并导致双精度1.333,因为现在它是双精度/int->双精度/double by promotion->double使用适当的浮点除法

类似地,对于Height/4,假设Height为整数,则以下操作也有效:

(double)Height / 4          // double / int -> double
Height / 4d                 // int / double -> double
(double)Height / (double)4  // double / double -> double

快乐编码

C的数学是正确的。对正在做的事情的理解是。。缺失:-

int/int类型的表达式4/3将计算为整数值1,因为它使用整数除法。两个操作数都是整数。然后,结果1在赋值时被隐式强制为双精度值

另一方面,4d/3将起作用,并导致双精度1.333,因为现在它是双精度/int->双精度/double by promotion->double使用适当的浮点除法

类似地,对于Height/4,假设Height为整数,则以下操作也有效:

(double)Height / 4          // double / int -> double
Height / 4d                 // int / double -> double
(double)Height / (double)4  // double / double -> double
快乐编码

4和3都是整数,因此变为1。让它们成为浮点值:

double ratio = 4.0 / 3.0;
请注意,您在高度方面也犯了同样的错误。现在这无关紧要,但它会将其更改为4.0。如果这是实际的代码,为什么要除以4再乘以4

private void FindOptimalRes(PictureBox picBox)
{
    picBox.Size = new Size(Height / 3, Height / 4);
}
4和3都是整数,所以变为1。让它们成为浮点值:

double ratio = 4.0 / 3.0;
请注意,您在高度方面也犯了同样的错误。现在这无关紧要,但它会将其更改为4.0。如果这是实际的代码,为什么要除以4再乘以4

private void FindOptimalRes(PictureBox picBox)
{
    picBox.Size = new Size(Height / 3, Height / 4);
}

也许您应该进行十进制除法,而不是整数除法:

double h = Height / 4.0;
double ratio = 4 / 3.0;
double ratio = 4 / 3; // evaluates to 1

如果不使用C Math,世界上很多东西都会被禁用。

也许你应该使用十进制除法,而不是整数除法:

double h = Height / 4.0;
double ratio = 4 / 3.0;
double ratio = 4 / 3; // evaluates to 1

如果不使用C Math,世界上许多东西也会被禁用。

您正在使用整数除法:

double h = Height / 4.0;
double ratio = 4 / 3.0;
double ratio = 4 / 3; // evaluates to 1
由于小数点被截断,因此计算结果不是1.333,而是1,因此不会给出您要查找的值。至少有一个操作数需要为双精度:

double ratio = 4.0 / 3.0; // evaluates to 1.333

身高也是如此。将4改为4.0。

您正在进行整数除法:

double h = Height / 4.0;
double ratio = 4 / 3.0;
double ratio = 4 / 3; // evaluates to 1
由于小数点被截断,因此计算结果不是1.333,而是1,因此不会给出您要查找的值。至少有一个操作数需要为双精度:

double ratio = 4.0 / 3.0; // evaluates to 1.333

身高也是如此。将4更改为4.0。

确保除法结果为双倍

无需将输入值设置为双倍

var num1 = // an integer number
var num2 = // an integer number

//result is integer, because of integer/integer uses 'integer division'
double result = num1 / num2; 

//result is double , because of you forced to 'double division'
double result = (double) num1 / num2;

确保除法结果是双倍的

无需将输入值设置为双倍

var num1 = // an integer number
var num2 = // an integer number

//result is integer, because of integer/integer uses 'integer division'
double result = num1 / num2; 

//result is double , because of you forced to 'double division'
double result = (double) num1 / num2;

你在做整数除法

您需要做的是:

private void FindOptimalRes(PictureBox picBox)
{
    double h = Height / 4D; // or Height / 4.0
    double ratio = 4D / 3D; // or 4.0 / 3.0
    picBox.Size = new Size((int)(h * ratio), (int)h); // Size is now correct [133,100]
}
当您使用无小数位数的整数文本执行数学运算时,它隐式地键入为int


只需在文本4D,3D的末尾加上大写字母D,就可以将它们作为双精度输入,这样你的数学就正确了。或者,在进行整数除法时,可以编写4.0、3.0

您需要做的是:

private void FindOptimalRes(PictureBox picBox)
{
    double h = Height / 4D; // or Height / 4.0
    double ratio = 4D / 3D; // or 4.0 / 3.0
    picBox.Size = new Size((int)(h * ratio), (int)h); // Size is now correct [133,100]
}
当您使用无小数位数的整数文本执行数学运算时,它隐式地键入为int


只需在文本4D,3D的末尾加上大写字母D,就可以将它们作为双精度输入,这样你的数学就正确了。或者你可以写4.0,3.0,你应该先确定你是否有错误,然后再说C有数学错误为什么这个问题被否决了?仅仅因为某人对某件事一无所知并不是对他的问题投否决票的理由。他甚至展示了他的代码和所有东西。我想,也许:试着选择一个更准确的/反映问题的,不那么好斗的标题。这是一个很好的读物:另外,我已经更改了你的标题,让未来有类似问题的访问者更容易找到这篇文章。我看到minitech删除了你的最后一行-谢谢@minitech!可以谢谢你,达什。我为我的……道歉。。无意义?不管怎样再次谢谢。哈哈…你应该先确定你是否有错误,然后再说C有数学错误。为什么这个问题被否决了?仅仅因为某人对某件事一无所知并不是对他的问题投否决票的理由。他甚至展示了他的代码和所有东西。我想,也许:试着选择一个更准确的/反映问题的,更少的
好斗的标题。这是一个很好的读物:另外,我已经更改了你的标题,以便将来有类似问题的访问者更容易找到这篇文章。我看到minitech删除了你的最后一行-谢谢@minitech!可以谢谢你,达什。我为我的……道歉。。无意义?不管怎样再次谢谢。哈哈,谢谢你。你意识到我是在开玩笑说C的数学是错的,你给了我一个直接而正确的答案非常感谢。你意识到我是在开玩笑说C的数学是错的,你给了我一个直接而正确的答案作为记录,我确实知道C的数学是正确的。我已经有一段时间没有编写一般的程序了,用C语言编程也快一年了,所以我忘了那个小规则。但谢谢你的正确回答,也谢谢你提醒我这一点根据记录,我确实知道C的数学是正确的。我已经有一段时间没有编写一般的程序了,用C语言编程也快一年了,所以我忘了那个小规则。但谢谢你的正确回答,也谢谢你提醒我这一点P