如何将时间乘以十进制?

时间:2017-11-11 11:19:14

标签: c# timespan

我正在开发一个项目,用于计算用户输入的两次不同时间的通话费用。我已将数据解析为代码DateTime

        DateTime starttime = new DateTime(Convert.ToDateTime(cal1.SelectedDate).Year,Convert.ToDateTime(cal1.SelectedDate).Month,Convert.ToDateTime(cal1.SelectedDate).Day,
    Convert.ToInt32(drpdwn1.SelectedValue),
    Convert.ToInt32(drpdwn2.SelectedValue),
    Convert.ToInt32(drpdwn3.SelectedValue));

    DateTime endtime = new DateTime(Convert.ToDateTime(cal1.SelectedDate).Year, Convert.ToDateTime(cal1.SelectedDate).Month, Convert.ToDateTime(cal1.SelectedDate).Day,
    Convert.ToInt32(drpdwn4.SelectedValue),
    Convert.ToInt32(drpdwn5.SelectedValue),
    Convert.ToInt32(drpdwn6.SelectedValue));

并减去两者以获得一个时间跨度。

            TimeSpan duration3 = (endtime - starttime);
            txtDisplay.Text = duration3.ToString();

有人可以帮我找到将$ 0.35乘以timespan duration3 的方法吗? 这是我现在正在使用的,但文本框一直显示0

 double mins = duration3.Minutes;
        double hrs = duration3.Hours;
        double cost = ((hrs * 60) + mins) * 0.35;
        txtCost.Text = cost.ToString();
        //$0.35/min
        // ((0.35*60)*hr + 0.35*min)

4 个答案:

答案 0 :(得分:2)

可能是这样的:

static decimal Foo(TimeSpan duration, decimal perMinuteRate)
    => ((decimal)duration.TotalMinutes) * perMinuteRate;

虽然注意到TotalMinutesdouble,但如果您的持续时间非常小,则可能出现意外舍入。

答案 1 :(得分:1)

最好这样做,所以你不要干扰双精度错误:

public static decimal MultiplyPerMinute(TimeSpan a, decimal b)
{
    return a.Ticks * b / TimeSpan.TicksPerMinute;
}

当您使用小数时,只有双倍或浮动应该在任何可能的运算符中吓跑你。 Decimal是一种专门用于数字和精确耐用操作的类型。

答案 2 :(得分:0)

如上所述,问题不是很清楚。真的有两个问题:

  1. 如何将TimeSpan乘以小数?
  2. 为什么我的TextBox始终显示为零?
  3. 问题1不清楚 - 可以通过多种方式解释。通过阅读发布的代码,评论和其他答案,可以看出您正在尝试计算TimeSpan的成本,并给出每分钟的成本"。为什么不问这个问题?

    但这不是您的问题 - 您发布的代码确实表明您已了解如何计算TimeSpan的成本,并考虑到每分钟的成本",问题在于你的"文本框一直显示0"。

    从发布的代码中,我不知道为什么会这样。但是,遵循一些良好的调试实践应该可以很快帮助您自己缩小问题范围。

    请参阅Eric Lippert发表的一篇文章的链接,您会觉得有用: How to debug small programs

答案 3 :(得分:-1)

无需自己计算分钟数 - 乘法很容易:

        TimeSpan ts = DateTime.Now - DateTime.Today;
        var cost = ((int)ts.TotalMinutes)  * 0.35m; // cost per minute, edited wrongly used 0.63m

int输出TotalMinutes的小数,以避免23.2832的结算;)