0

我正在尝试将整数除以小数/浮点数/双精度数。我可以将整数除以使用: int Num1 = 300 / 2;,但是当我尝试将“2”设为小数时,它将不起作用。我见过有人提到这样做int Num1 = 300 / ((float)1.25);。老实说,这对我来说没有任何意义......我也试过int Num1 = Decimal.Divide(300, 1.25);没有任何运气......

4

4 回答 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转换floatint您。因此,您需要告诉编译器您不介意丢失精度并将其转换为 int

int Num1 = (int)(300 / ((float)1.25));

或者您可以将类型更改为Num1浮点数。

float Num1 = 300 / ((float)1.25);
于 2013-04-23T22:47:58.787 回答