C#:整数除以100

C#:整数除以100,c#,divide,C#,Divide,如何将int除以100 例如: 为什么这会导致y是328而不是328.94?因为你在做整数除法。在100后面加一个句号,你会得到一个双精度的 当你除以两个整数时,结果是一个整数。整数没有小数位数,所以它们只是被截断。因为整数只是一个整数。试试这个 int x = 32894; double y = x / 100.0; 当一个整数除以另一个整数时,该运算作为整数运算执行 如果希望将其作为浮点、双精度或十进制算术执行,则需要适当地强制转换其中一个值。例如: decimal y = ((decim

如何将
int
除以100

例如:


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

因为你在做整数除法。在100后面加一个句号,你会得到一个双精度的


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

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

int x = 32894;
double y = x / 100.0;

当一个整数除以另一个整数时,该运算作为整数运算执行

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

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"

至于您是否应该使用
十进制
双精度
还是
浮点
,这取决于您尝试执行的操作。阅读我关于和的文章。通常,如果你处理的是“自然”量,如身高和体重,其中任何值实际上都是近似值,那么
double
是合适的
decimal
适用于货币等人工量,这些人工量通常以十进制值开始表示。

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

我建议您将其转换为十进制:

decimal y = 32894M / 100;
或使用变量:

decimal y = (decimal)x / 100;

它的编程原理是整数除法不同于浮点除法

如果你想要的话。94使用浮点或双精度

var num = 3294F/100F

你在做整数除法,这是神奇的四舍五入。试试看(32894.0/100.0)。在一个完全相关的节点上,您希望如何在整数数据类型中存储328.94?@Ravi如果期望的答案是328.94,那么不要使用
double
。@Marc:为什么不能使用
double
?@Craig:328.94不能准确地表示为double。请参阅我答案末尾的链接。最接近的精确双精度是328.9399999999772626324556767940521240234375。@Craig,因为浮点数算术(IEEE754)不一定能给出您期望的结果,因为数字是如何表示/四舍五入的
decimal
使用以10为基数的算术/四舍五入,这将保持
.94
的简洁性。使用
double
算术,仍然无法保证得到的
328.94
是正确的。所以,为了保证一个精确的数字,他可能应该用十进制来代替,但在很多情况下,我认为双精度就足够了。这将无法编译。您正在尝试将十进制数指定给int。未看到它。很高兴看到它修好了。在你的编辑之后,这显然是最好的答案:)@Øyvind:这是一个公平的抱怨,当然-当我注意到我最初发布了不可编译的代码时,我感到很尴尬:)Skeet先生再次出手相救。
var num = 3294F/100F