8

如何除以int100?

例如:

int x = 32894;
int y = 32894 / 100;

为什么这会导致y存在328而不是328.94

4

5 回答 5

18

当一个整数除以另一个整数时,算术作为整数算术执行。

如果您希望它作为浮点、双精度或十进制算术执行,则需要适当地转换其中一个值。例如:

decimal y = ((decimal) x) / 100;

请注意,我也更改了 的类型y- 执行十进制算术但将结果存储在int. int不可能存储 328.94 。

您只需要将其中一个值强制为正确的类型,然后另一个将被提升为相同的类型 - 例如,没有定义用于将小数除以整数的运算符。如果您使用多个值执行算术运算,为了清楚起见,您可能希望将所有这些值强制为所需的类型 - 如果一个操作使用整数算术执行,而另一个操作使用双精度算术执行,那将是不幸的,当您预计两者都会翻倍。

如果您使用的是文字,则可以只使用后缀来指示类型:

decimal a = x / 100m; // Use decimal arithmetic due to the "m"
double b = x / 100.0; // Use double arithmetic due to the ".0"
double c = x / 100d; // Use double arithmetic due to the "d"
double d = x / 100f; // Use float arithmetic due to the "f"

至于您是否应该使用decimal,doublefloat,这取决于您要做什么。阅读我关于十进制浮点二进制浮点的文章。double如果您正在处理诸如身高和体重之类的“自然”量,通常是合适的,其中任何值实际上都是近似值;decimal适用于货币等人工数量,通常以十进制值开始。

于 2011-03-09T07:09:01.347 回答
3

因为 int 只是一个整数。试试这个。

int x = 32894;
double y = x / 100.0;
于 2011-03-09T07:08:48.110 回答
3

328.94 不是整数。整数/除法向下舍入;这就是它的工作原理。

我建议你转换为十进制:

decimal y = 32894M / 100;

或带有变量:

decimal y = (decimal)x / 100;
于 2011-03-09T07:09:04.613 回答
0

因为你正在做整数除法。在 100 后面添加一个句点,你会得到一个双倍。

当您将两个整数相除时,结果是一个整数。整数没有小数位,所以它们只是被截断。

于 2011-03-09T07:08:28.527 回答
0

它的编程基础是int(整数)除法不同于float(浮点)除法。

如果你想要 .94 使用 float 或 double

var num = 3294F/100F
于 2011-03-09T07:09:06.660 回答