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