我正在尝试将整数除以小数/浮点数/双精度数。我可以将整数除以使用: int Num1 = 300 / 2;
,但是当我尝试将“2”设为小数时,它将不起作用。我见过有人提到这样做int Num1 = 300 / ((float)1.25);
。老实说,这对我来说没有任何意义......我也试过int Num1 = Decimal.Divide(300, 1.25);
没有任何运气......
问问题
1325 次
4 回答
4
问题是您试图将结果保存到int
. 尝试这个:
float result = 300 / (float)2;
float result = 300 / (float)1.25;
或者为了更简洁(这f
是向编译器发出的信号,表明这是一个float
常量):
float result = 300 / 2f;
float result = 300 / 1.25f;
请注意,float
它与 a 非常不同decimal
,并且两者都有其优点。要使用小数:
decimal result = decimal.Divide(300, 1.25);
或者这个(这m
是向编译器发出的一个信号,表明这是一个decimal
常量):
decimal result = decimal.Divide(300m, 1.25m);
于 2013-04-23T22:46:10.213 回答
2
简单的说:
- 如果您对不同类型的两个数字进行算术运算(如 +、-、*、/),编译器会将“最小”类型转换为可以保存最多信息的“最大”类型。因此,如果您将 300(整数)除以 1.25(双精度),编译器会将 300 转换为双精度,然后将两个双精度都分开。结果类型将是相同的类型,因此:双精度型。
- 如果您想将“较大”类型的结果放入“较小”类型(一种可以容纳较少信息的类型,如分数),则必须使用显式强制转换将此类型转换为较小的类型。所以,如果你想把一个 double 放入一个 int 中,你必须将它转换为一个 int,这可能会导致信息丢失。
- C# 知道可以在常数上使用的许多后缀,以明确说明该数字是什么类型:
- 10U ==> 单位
- 10L ==> 长
- 10F ==> 浮动
- 10D ==> 双倍
- 10M ==> 十进制。
于 2013-04-23T23:10:47.213 回答
1
您正在尝试将结果存储在整数中。而是使用 double 作为变量的类型来存储结果:
double Num1 = 300 / 2;
double Num1 = 300 / 1.25;
于 2013-04-23T22:45:46.970 回答
0
Anint
只能存储整数。当您将整数除以小数时,输出将是小数(即使您使用4.00
浮点数的存储方式)。
这不会编译
int Num1 = 300 / ((float)1.25);
即使您正在强制转换一个明确的浮点数(否则 1.25 将是 a double
),您正在尝试将其存储在类型的变量中int
。编译器不会自动执行此操作,因为不存在隐式转换以将 a转换float
为int
您。因此,您需要告诉编译器您不介意丢失精度并将其转换为 int
int Num1 = (int)(300 / ((float)1.25));
或者您可以将类型更改为Num1
浮点数。
float Num1 = 300 / ((float)1.25);
于 2013-04-23T22:47:58.787 回答