如何转换数字?双访问列值转换为十进制

本文关键字:转换 访问 十进制 数字 何转换 | 更新日期: 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"]));

(只需在"0.00"后面加上"M"就可以关闭编译器的批评。