C# 用整数乘以小数行吗?
我是C#和.NET的新手,所以我很抱歉这是一个太简单的问题 我有一个十进制变量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
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是不精确的。