整数除以十进制数

本文关键字:十进制数 整数 | 更新日期: 2023-09-27 18:10:29

我正在尝试将整数除以小数/浮点数/双精度。我可以用:int Num1 = 300 / 2;来划分整数,但是当我试图把"2"变成小数时,它就行不通了。我看到有人提到做这个int Num1 = 300 / ((float)1.25);。老实说,这对我来说毫无意义……我也试过int Num1 = Decimal.Divide(300, 1.25);没有任何运气…

整数除以十进制数

问题是您试图将结果保存到int。试试这个:

float result = 300 / (float)2;
float result = 300 / (float)1.25;

或者为了更简洁(f是一个信号,告诉编译器这是一个float常量):

float result = 300 / 2f;
float result = 300 / 1.25f;

请注意,floatdecimal非常不同,两者都有各自的优点。使用小数:

decimal result = decimal.Divide(300, 1.25);

或者这个(m是一个信号,告诉编译器这是一个decimal常量):

decimal result = decimal.Divide(300m, 1.25m);

简单地说:

  • 如果你对两个不同类型的数字进行算术运算(如+,-,*,/),编译器会将"最小"类型转换为可以保存最多信息的"最大"类型。因此,如果用300(整型)除以1.25(双精度型),编译器会将300转换为双精度型,然后将两个双精度型相除。结果类型将是相同的类型,因此:double。
  • 如果你想把"较大"类型的结果转换为"较小"类型(可以容纳较少信息的类型,如分数),你必须通过显式强制转换将该类型转换为较小的类型。所以,如果你想把一个double类型的int类型转换成int类型,你必须把它强制转换成int类型,这可能导致信息丢失。
  • c#知道可以在常量上使用许多后缀,以显式地声明该数字的类型:
    • 10U ==> int
    • 10L ==>长
    • 10F ==> float
    • 10D ==> double
    • 10米==>十进制

您试图将结果存储为整数。相反,使用双精度体作为变量的类型来存储结果:

double Num1 = 300 / 2;
double Num1 = 300 / 1.25;

int只能存储整数。当你用一个整数除以一个小数,输出将是一个小数(即使你使用4.00,因为浮点数的存储方式)。

这不会编译

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

即使你正在强制转换一个显式浮点数(否则1.25将是double),你试图将它存储在int类型的变量中。编译器不会自动执行此操作,因为不存在隐式转换,无法将float强制转换为int。因此,您需要告诉编译器您不介意失去精度并将其强制转换为int

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

或者您可以将Num1的类型更改为float

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