用十进制数除以整数

时间:2013-04-23 22:42:21

标签: c# math

我试图将整数除以十进制/浮点数/双精度数。我可以使用:int Num1 = 300 / 2;来分割整数,但是当我尝试制作那个" 2"一个小数,它不会工作。我见过有人提到这样做int Num1 = 300 / ((float)1.25);。老实说,这对我没有任何意义......我也试过int Num1 = Decimal.Divide(300, 1.25);但没有任何运气..

4 个答案:

答案 0 :(得分:4)

问题在于您尝试将结果保存为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);

答案 1 :(得分:2)

简单地说:

  • 如果对两个不同类型的数字进行算术运算(如+, - ,*,/),编译器会将“最小”类型转换为可以保存最多信息的“bigest”类型。因此,如果你将300(一个int)除以1.25(一个双精度数),编译器会将300转换为double,而不是两个双精度。结果类型将是相同的类型,因此:double。
  • 如果要将“较大”类型的结果放入“较小”类型(可以保存较少信息的类型,如分数),则必须使用显式转换将此类型转换为较小的类型。所以,如果你想把一个双精度放到一个int中,你必须把它强制转换成一个int,导致可能丢失信息。
  • C#知道可以在常数上使用的许多后缀,以明确说明该数字的类型:
    • 10U ==> UINT
    • 10L ==>长
    • 10F ==>浮
    • 10D ==>双
    • 10M ==>小数。

答案 2 :(得分:1)

您正在尝试将结果存储为整数。而是使用double作为变量的类型来存储结果:

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

答案 3 :(得分:0)

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

这不会编译

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

即使您正在构建显式浮点数(否则1.25将是double),您尝试将其存储在int类型的变量中。编译器不会自动执行此操作,因为implicit conversion doesn't exist会为您float投射int。因此,您需要告诉编译器您不介意丢失精度并将其转换为int

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

或者您可以将Num1的类型更改为浮动。

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