我最近将属性从double更改为十进制,发现了一个奇怪的效果。 属性返回的所有数字都将被截断。
这是代码的一部分:
private int _SalesPrice;
// [ ... ]
public decimal SalesPrice
{
get { return Convert.ToDecimal(_SalesPrice / 1000); }
set { _SalesPrice = Convert.ToInt32(value * 1000); }
}
如果我在我的代码中有这样的东西:
SalesPrice = 5.98
_SalesPrice将是5980,但SalesPrice返回5,没有小数。
背后的原因是什么? 使用 double 代替十进制可以正常工作。
我正在使用VS2010
答案 0 :(得分:2)
你正在进行整数除法,而不是十进制:
return _SalesPrice / 1000M;
答案 1 :(得分:0)
return Convert.ToDecimal(_SalesPrice / 1000);
您在分割后转换为十进制,这将在整数上执行,即截断。分裂前转换。
此外,此处不需要使用Convert
,只需使用普通模型。
答案 2 :(得分:0)
您的值被截断,因为您将int除以int。将1000
更改为1000.0
。除以它之前将它除以双重转换。
public decimal SalesPrice
{
get { return Convert.ToDecimal(_SalesPrice / 1000.0); }
set { _SalesPrice = Convert.ToInt32(value * 1000.0); }
}
答案 3 :(得分:0)
我强烈怀疑,因为你在吸气器中正在做integer division。它总是丢弃小数部分。
这就是为什么5980 / 1000
总是会返回5
。
一个选项可以将整数除法更改为浮点除法;
get { return Convert.ToDecimal(_SalesPrice / 1000.0); }