c# 中的除法没有按我预期的方式进行

问题描述 投票:0回答:6

我正在尝试写一些东西来让我的图像正确显示。 我有 2 个号码“breedtePlaatje”和“hoogtePlaatje”。当我加载这两个变量时,我得到的值是“800”和“500”,我期望“verH”为(500 / 800) = 0,625。然而 verH 的值 = 0..

这是代码:

int breedtePlaatje = Convert.ToInt32(imagefield.Width);
int hoogtePlaatje = Convert.ToInt32(imagefield.Height);

//Uitgaan van breedte plaatje
if (breedtePlaatje > hoogtePlaatje)
{
    double verH = (hoogtePlaatje/breedtePlaatje);
    int vHeight = Convert.ToInt32(verH * 239);

    mOptsMedium.Height = vHeight;
    mOptsMedium.Width = 239;

    //Hij wordt te klein en je krijgt randen te zien, dus plaatje zelf instellen
    if (hoogtePlaatje < 179)
    {
        mOptsMedium.Height = 179;
        mOptsMedium.Width = 239;
    }
}

有关我的方法的任何提示也很可爱。

c# double scale
6个回答
11
投票

int 除以 int 得到一个 int。

double verH = (hoogtePlaatje/breedtePlaatje);

赋值的右侧是一个整数值。

将breedtePlaatje和/或hoogtePlaatje更改为双倍,您将得到您期望的答案。


7
投票

整数除法将返回一个整数作为除法结果。

您需要除法的参数之一是浮点型,以使结果成为浮点型。您可以通过将其中一个投射到浮点数上来完成此操作。

double verH = (double)hoogtePlaatje/breedtePlaatje;

或者

double verH = hoogtePlaatje/(double)breedtePlaatje;

有关除法,请参阅 C# 规范


4
投票

当您除两个整数时,C# 使用整数除法,其中小数部分被丢弃。在你的情况下,你会得到:

500 / 800 = 0 + 5/8 

去掉小数部分,得到:

500 / 800 = 0

要获得浮点除法,请根据所需的精度级别将其中一个参数转换为

double
float
decimal
,这将导致另一个参数隐式转换为相同类型,并且使用浮点规则而不是整数规则进行除法,例如

double result = (double)breedtePlaatje  / hoogtePlaatje ;

2
投票

我从未使用过 C#,但可能您需要将其中一个变量转换为 double,如下所示:

double verH = (double)hoogtePlaatje/breedtePlaatje;

1
投票

试试这个:

double verH = double (hoogtePlaatje) / breedtePlaateje;

如果将一个 int 除以一个 int,您将得到一个截断的结果。将其中一个变为双倍,整个除法将变为双倍。


0
投票

C 升号像小孩子一样除以整数。丢弃任何剩余的小数部分。只需将分母转换为双精度型或浮点数,它就会按照您期望的方式工作。当除以常量整数时,请记住在整数后面加上 .0 以使其成为双精度数。

© www.soinside.com 2019 - 2024. All rights reserved.