BMI公式和数据类型错误

时间:2013-10-11 08:56:43

标签: c# types casting

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

My formula is BMI = (weight /(height * height)) * factor.
Example:      BMI = (172 / (73 * 73 )) * 703
              BMI = (172 / 5329) * 703
              BMI = ( 0.032) * 703
              BMI =   22.69

我的问题是,在我将重量除以高度后,我得到一个负数。尽管事实上,当我通过因子变量将它倍数超过0时,我无法将其保存在我的整数变量中。所以我的总体BMI总是在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);
    }
}

3 个答案:

答案 0 :(得分:3)

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

double result = factor * (pounds / (double)(height * height));

这样您就会强制结果为十进制数。

编辑: 问题是如下。想象整数是物理对象 - 例如苹果。

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

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

检查这些不完美的好工具是float converter。例如,0.5可以精确存储,但0.6不能。亲自尝试一下。

答案 1 :(得分:1)

你永远不应该从2个正数的分区得到负数。因此,如果您得到否定结果,则您的一个输入是负数(并且当您将高度乘以其自身时,负数必须来自权重)。

如果您希望结果为integer值,那么移动括号内的factor乘数就可以了:

int result = (factor * weight) / (height * height);

这可行,因为factor * weight将始终大于height * height,因此答案将为非零整数。

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

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

答案 2 :(得分:0)

是的,您需要将BMI(结果)的数据类型从int更改为double。我希望一切顺利。

请替换现有的代码行:int feet, inches, height, pounds, result, factor;

双脚,英寸,系数,结果,身高,磅,;