Math 将秒转换为天、小时、分钟和秒
我正在尝试使用F#将特定的秒值转换为以下格式: 00d 00h 00m 00s 我确信我的计算是正确的,但它也给了我错误的时间。我的代码如下:Math 将秒转换为天、小时、分钟和秒,math,f#,Math,F#,我正在尝试使用F#将特定的秒值转换为以下格式: 00d 00h 00m 00s 我确信我的计算是正确的,但它也给了我错误的时间。我的代码如下: let sum = 266521 let day = sum / 86400 let leftover = sum % 86400 let hour = leftover / 3600 leftover = leftover % 3600 let minute = leftover / 60 leftover = leftover % 60 我试
let sum = 266521
let day = sum / 86400
let leftover = sum % 86400
let hour = leftover / 3600
leftover = leftover % 3600
let minute = leftover / 60
leftover = leftover % 60
我试图进行贪婪计算,但它给出了以下值: 3d 2h 122m 7321s 但不可能是122米,应该在一小时内。我不明白我的错误在哪里。 你能帮助我吗?
提前感谢这是因为F#中的值是不可变的(不能更改)。您的值“leftover”保持在其第一个值7321。这样做有助于线程和数据共享。在更改“剩余”的值时创建新值,或者以其他方式使该值可变:
let mutable leftover = sum % 86400
leftover <- leftover % 3600
让可变剩余=总和%86400
剩下的线
leftover = leftover % 3600
是一个布尔表达式,用于将剩余部分
与剩余部分%3600
进行比较(其计算结果可能为false)。你需要做的是分配一个新值
let leftover' = leftover % 3600
然后随后使用leftover'
。如何利用内置功能
> open System;;
> let secs = 266521;;
val secs : int = 266521
> let s = (TimeSpan.FromSeconds (float secs)).ToString "d\d\ hh\h\ mm\m\ ss\s";;
val s : string = "3d 02h 02m 01s"
请注意编译器警告。有问题的行生成此表达式的类型应为“unit”,但类型为“bool”。使用“ignore”放弃表达式的结果,或使用“let”将结果绑定到名称。
True,但在具体示例中指出F#编码的细微之处是值得的。
> open System;;
> let secs = 266521;;
val secs : int = 266521
> let s = (TimeSpan.FromSeconds (float secs)).ToString "d\d\ hh\h\ mm\m\ ss\s";;
val s : string = "3d 02h 02m 01s"