C# 当输入和输出应为整数时,如何保存中间分数结果?

C# 当输入和输出应为整数时,如何保存中间分数结果?,c#,types,casting,C#,Types,Casting,我正在尝试使用c#创建一个BMI计算器 我的问题是,在我把体重除以身高之后,我得到了一个分数,尽管当我把它乘以大于1的因子时,我不能把它保存在我的整数变量中。所以我的总体重指数总是在0 我需要重新考虑我的数据类型吗?或者我应该把它们转换成什么?我不确定如何解决这个问题 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void

我正在尝试使用c#创建一个BMI计算器

我的问题是,在我把体重除以身高之后,我得到了一个分数,尽管当我把它乘以大于1的因子时,我不能把它保存在我的整数变量中。所以我的总体重指数总是在0

我需要重新考虑我的数据类型吗?或者我应该把它们转换成什么?我不确定如何解决这个问题

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Calculate_Click(object sender, EventArgs e)
    {
        int feet, inches, height, pounds, result, factor;
        factor = 703;

        //convert the text input to the correct data type
        feet = Convert.ToInt32(feetBox.Text);
        inches = Convert.ToInt32(inchesBox.Text);
        pounds = Convert.ToInt32(poundsBox.Text);

        //turn the feet and inches into a single height value in inches
        height = (feet * 12) + inches;

        //calculate the BMI
        //result = (pounds / (height * height) ) * factor;
        result = factor * (pounds / (height * height));

        // output the results
        output.Text = String.Format("Your BMI is: {0}", result);
    }
}

您正面临整数除法。如果将整数除以整数,则结果再次为整数。要解决此问题,必须将值强制转换为浮点类型(float/double)。这将解决问题

double结果=系数*(磅/(双倍)(高度*高度))

这样,您将强制结果为十进制数

编辑: 问题如下。把整数想象成物理对象——例如苹果

7/3
你有
7个
苹果,你想送给
3个孩子。每个孩子能得到多少苹果?答案是
2
。剩下的当然是1。但是整数除法不返回余数,因此在除法过程中,此信息“丢失”

编程时,经验法则是,尽可能长时间地使用整数。由于十进制数存储在内存中的方式,存在一些错误。请注意,最多可以以浮点类型存储一些任意值整数,而不会丢失精度,但从阈值开始,即使是整数也会出现错误。 在下面的浮点转换器中尝试
123456789
,它不会被准确地存储,这就是为什么最好尽可能长时间地使用整数


检查这些缺陷的好工具是这个。例如,
0.5
可以精确存储,但
0.6
不能。你自己试试。

你正面临整数除法。如果将整数除以整数,则结果再次为整数。要解决此问题,必须将值强制转换为浮点类型(float/double)。这将解决问题

double结果=系数*(磅/(双倍)(高度*高度))

这样,您将强制结果为十进制数

编辑: 问题如下。把整数想象成物理对象——例如苹果

7/3
你有
7个
苹果,你想送给
3个孩子。每个孩子能得到多少苹果?答案是
2
。剩下的当然是1。但是整数除法不返回余数,因此在除法过程中,此信息“丢失”

编程时,经验法则是,尽可能长时间地使用整数。由于十进制数存储在内存中的方式,存在一些错误。请注意,最多可以以浮点类型存储一些任意值整数,而不会丢失精度,但从阈值开始,即使是整数也会出现错误。 在下面的浮点转换器中尝试
123456789
,它不会被准确地存储,这就是为什么最好尽可能长时间地使用整数


检查这些缺陷的好工具是这个。例如,
0.5
可以精确存储,但
0.6
不能。您自己试试。

是的,您需要将BMI(结果)的数据类型从int更改为double。我希望到时候一切都会好起来

请替换现有代码行:
int英尺、英寸、高度、磅、结果、系数


双英尺、英寸、系数、结果、高度、磅

是的,您需要将BMI(结果)的数据类型从int更改为double。我希望到时候一切都会好起来

请替换现有代码行:
int英尺、英寸、高度、磅、结果、系数


双英尺、英寸、系数、结果、高度、磅

你永远不应该从两个正数的除法中得到一个负数。因此,如果你得到的结果是负数,那么你的输入之一就是负数(当你将身高乘以自身时,负数一定来自体重)

如果希望结果是一个
整数
值,则将
因子
乘法器移到括号内即可:

int result = (factor * weight) / (height * height);
这将起作用,因为
因子*权重
将始终大于
高度*高度
,因此答案将是一个非零整数

如果要在结果中使用小数(BMI通常包含小数,例如,
22.6
),则需要执行浮点除法,而不是整数除法。最简单的方法是将所有变量更改为
double
,而不是
int
,或者在等式开头简单地引入一个十进制数。以下内容将产生正确的结果:

double factor = 703.0;
double result = (factor * weight) / (height * height);

你不应该从两个正数的除法中得到一个负数。因此,如果你得到的结果是负数,那么你的输入之一就是负数(当你将身高乘以自身时,负数一定来自体重)

如果希望结果是一个
整数
值,则将
因子
乘法器移到括号内即可:

int result = (factor * weight) / (height * height);
这将起作用,因为
因子*权重
将始终大于
高度*高度
,因此答案将是一个非零整数

如果要在结果中使用小数(BMI通常包含小数,例如,
22.6
),则需要执行浮点除法,而不是整数除法。最简单的方法是将所有变量更改为
double
,而不是
int
,或者在等式开头简单地引入一个十进制数。以下内容将产生正确的结果:

double factor = 703.0;
double result = (factor * weight) / (height * height);

值为172,代码块中的磅数发生变化