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