当输入和输出应该是整数时,如何保存中间小数结果

本文关键字:何保存 保存 结果 小数 中间 输出 输入 整数 | 更新日期: 2023-09-27 18:34:48

我正在尝试使用 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
我的

问题是,在我将重量除以高度后,我得到了分数,尽管事实上当我将其乘以它高于 1 的因子时,我无法将其保存在我的整数变量中。所以我的总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);
    }
}

当输入和输出应该是整数时,如何保存中间小数结果

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

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

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

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

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

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

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

你永远不应该从 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);

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

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

双英尺, 英寸, 因子, 结果, 身高, 磅, ;