Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用整数乘以小数行吗?_C#_.net_Int_Decimal_Type Conversion - Fatal编程技术网

C# 用整数乘以小数行吗?

C# 用整数乘以小数行吗?,c#,.net,int,decimal,type-conversion,C#,.net,Int,Decimal,Type Conversion,我是C#和.NET的新手,所以我很抱歉这是一个太简单的问题 我有一个十进制变量decVar。 我需要将它与整数变量相乘intVar。 我需要结果为十进制。 那么,我应该将整数变量声明为int还是decimal 有了这个代码, decimal decVar = 0.1m; decimal decRes = decVar * intVar; 我是否应该这样声明: int intVar = 3; decimal intVar = 3; 或者像这样: int intVar = 3; decima

我是C#和.NET的新手,所以我很抱歉这是一个太简单的问题

我有一个十进制变量
decVar
。 我需要将它与整数变量相乘
intVar
。 我需要结果为
十进制
。 那么,我应该将整数变量声明为
int
还是
decimal

有了这个代码,

decimal decVar = 0.1m;
decimal decRes = decVar * intVar;
我是否应该这样声明:

int intVar = 3;
decimal intVar = 3;
或者像这样:

int intVar = 3;
decimal intVar = 3;
?

这是一个财务计算,因此我需要结果精确到
0.3


upd:代码更新(感谢Jon)

这没关系-无论如何,int将转换为decimal:没有*(decimal,int)运算符,只有*(int,int)*(decimal,decimal)。(当然还有其他类型。)

现在,
decimal
不能隐式转换为
int
,但是反向转换是有效的-因此编译器就是这样做的


但是,您需要更改
decVar
的声明,因为当前赋值运算符的右侧是双精度的,而不是十进制的。你是说0.1米。你也需要分号:)

这没什么区别。由于乘法的一个参数是
decimal
,因此另一个参数也将转换为
decimal
(如果它还不是一个)

此转换为:

转换注意事项

此类型提供将十进制值转换为和转换为的方法 SByte、Int16、Int32、Int64、Byte、UInt16、UInt32和UInt64。 从这些整数类型到十进制类型的转换正在扩大 从不丢失信息或引发异常的转换


无论您将其声明为
int
还是
decimal
。计算时,它将转换为十进制


此外,您永远无法保证浮点精度,因为有些数字不能用二进制精确表示。您必须采取其他预防措施以最大限度地减少舍入误差。

Upvoting用于指出浮点二进制表示的问题。有些数字也不能精确地用十进制表示。例如,1m/5m不是不精确的,但1d/5d是不精确的。