代码之家  ›  专栏  ›  技术社区  ›  SK2017

两个数据库列的计算返回零[重复]

c#
  •  0
  • SK2017  · 技术社区  · 6 年前

    这个问题已经有了答案:

    我正在运行一个简单的查询并计算两个值的百分比。每次运行时,计算都返回零。计算也被转换成十进制,所以我看不出是什么问题。

    from e in db.hours
    select new
    {
        OverTimeHoursPercentage = (decimal)((1088 / 22000) * 100)
    };
    

    在运行查询之后,我可以在调试器中看到,overtimehoursPercentage的类型是 decimal ,并且计算出的值应为零 4.94 .

    有什么想法吗?

    2 回复  |  直到 6 年前
        1
  •  1
  •   David    6 年前

    1088 22000 是整数,并且具有整数数学 1088 / 22000 0 . 0 * 100 也是 . 当转换成十进制时, 0.0 .

    您要做的是执行转换 之前 执行计算。幸运的是,您可以在文本值(编译时)中直接执行此操作,而不必在运行时强制转换。附加 M 对于表达式中的任何一个值,都应执行以下操作:

    (1088M / 22000) * 100
    

    或者,您可以显式地将它们全部标记为小数:

    (1088M / 22000M) * 100M
    

    通过此操作,可以移除强制转换,因为十进制表达式本身将是十进制:

    OverTimeHoursPercentage = (1088M / 22000M) * 100M
    
        2
  •  0
  •   musefan    6 年前

    将两个整数相除将产生一个整数结果,这将丢失您要查找的任何十进制精度。

    所以你至少要有一个价值观 在部门中 小数。铸造 之后 计算太晚了,损坏已经造成了。

    试试这个:

    OverTimeHoursPercentage = (((decimal)1088 / 22000)*100)
    

    或者更好的是,如果它是一个文本值,则将其声明为十进制,而不强制转换(请注意 m ):

    OverTimeHoursPercentage = ((1088m / 22000)*100)