【问题标题】:Convert float of seconds into float of minutes and seconds将秒的浮点数转换为分秒的浮点数
【发布时间】:2019-08-20 06:20:36
【问题描述】:

我有一个浮点数,其中包含应用程序处于活动状态的总秒数。

例如 float totalTime=523; 表示应用程序处于活动状态 523 秒

现在我想将该值更改为代表分钟和秒的float

如果我愿意

float timeResult=523/60;

我会得到 8.71

的 timeResult

虽然分钟是正确的,但秒不是因为它们在 0 到 100 之间缩放,而需要从 0 到 60

我需要这个来将此值保存为浮点数,因为使用带有 float 的应用程序分析更容易排序。

【问题讨论】:

  • 您不能在 0 到 60 之间缩放浮点数。它是建立在十进制系统上的。也许 TimeSpan 对你更有用
  • 523%60 = 43 523/60 = 8.71 可能使用 '%' 和 '/' 并结合起来??
  • 你能解释一下为什么你想要一个将时间表示为 . 的浮点数吗?正如@ADyson 指出的那样,这不是浮动的正常工作方式。
  • 你为什么不在几秒钟内保存它并在输出处做一些魔术?我永远不会这样做,因为它不可维护......
  • 但是如果你用浮点数 8.43 作为分钟做数学,你会得到错误的答案

标签: c#


【解决方案1】:

如果你想说61 秒等于1.01。然后你需要 divisionmodulo,然后简单地将余数 divide 除以 100,然后将结果相加。

注意:这是相当可疑的,将来可能会导致各种计算问题

var minutes = val / 60;
var seconds = (val % 60) / 100m;
Console.WriteLine(minutes+seconds);

【讨论】:

    【解决方案2】:

    我建议为该任务使用适当的数据类型,而不是 float

    var duration = TimeSpan.FromSeconds(573);
    

    然后您可以利用TotalMinutes 等属性。

    float 是一个非常糟糕的选择,但既然你需要它,你可以以一种非常干净的方式使用创建的变量:

    float f = (float) (duration.Minutes + duration.Seconds / 100f);
    

    【讨论】:

      【解决方案3】:
      var totalTime = 523f;
      var minutes = (int) (totalTime / 60);
      var remainingSeconds = (int) (totalTime - minutes * 60);
      System.Console.WriteLine(minutes.ToString() + ':' + remainingSeconds.ToString("00"));
      

      打印:8:43

      【讨论】:

        【解决方案4】:

        使用Shipley提供的代码here

        using System;
        TimeSpan time = TimeSpan.FromSeconds(seconds);
        string str = time .ToString(@"hh\:mm\:ss\:fff");
        

        【讨论】:

          【解决方案5】:

          如果你真的需要它在给定结构上返回一个浮点数(我个人认为这可能是以后麻烦的秘诀)你可以做一个更复杂的诡计

          float fMinutes = Math.Floor(<value> / 60.0F)
          int iSeconds = <value> % 60
          
          float constructedFloatValue = fMinutes + (iSeconds / 100.0F)
          

          请在尝试使用之前重新考虑您是否真的需要此构造。

          【讨论】:

            【解决方案6】:

            如果你真的想把它保存在浮点数中,你可以使用这个逻辑。不过,这不是推荐的解决方案。

                        float totalTime = 523f;
                        float remainingSeconds = (totalTime % 60f);
                        int intResult = (int)(totalTime / 60);
            
                        float finalResult = intResult + remainingSeconds / (float)(Math.Pow(10, remainingSeconds.ToString().Length));
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-01-21
              • 1970-01-01
              • 2014-09-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-08-30
              • 2019-01-06
              相关资源
              最近更新 更多