如何转换数字?双访问列值转换为十进制
本文关键字:转换 访问 十进制 数字 何转换 | 更新日期: 2023-09-27 18:17:42
由于十进制比双精度更适合用于货币值(请参阅David的回答),因此我试图更改代码以使用十进制而不是双精度。现在,我修改了这个:
public class InventoryItem
{
. . .
public double UnitCost { get; set; }
public double UnitList { get; set; }
public double OpenQty { get; set; }
. . .
…:
public class InventoryItem
{
. . .
public decimal UnitCost { get; set; }
public decimal UnitList { get; set; }
public decimal OpenQty { get; set; }
. . .
但是这让我在其他代码中感到悲伤,即"不能隐式地将类型'double'转换为'decimal'。在这段代码中存在显式转换(您是否缺少强制类型转换?)":
// I changed "double openQty" to "decimal openQty"
decimal openQty = (oleDbD8aReader["open_qty"] is DBNull
? 0.00
: Convert.ToDouble(oleDbD8aReader["open_qty"]));
所以,我尝试将"Convert.ToDouble()"更改为"Convert.ToDecimal()",但错误是,"无法确定条件表达式的类型,因为'double'和'decimal'之间没有隐式转换"
所检索的数据来自MS Access,其中所讨论的列的类型是Number,更具体地说,是Double (Number)。
我如何强制/转换访问双精度到"更好"的十进制类型?
问题不在于".ToDecimal()",而在于"0.00"
:
decimal openQty = (oleDbD8aReader["open_qty"] is DBNull
? 0.00
: Convert.ToDecimal(oleDbD8aReader["open_qty"]));
…必须变成这样:
decimal openQty = (oleDbD8aReader["open_qty"] is DBNull
? 0.00M
: Convert.ToDecimal(oleDbD8aReader["open_qty"]));