2014-07-10 3 views
2

나는 F 번호 사용하여, 다음과 같은 형식으로 초 특정 값을 변환하기 위해 노력하고있어 :변환 초

00D 00H의 00m의 00 년대

을 그리고 난 확신 I 올바른 계산을하고 있지만 잘못된 분이 나에게도 있습니다. 내 코드는 다음과 같다 :

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 

86400 -> Seconds in a day 
3600 -> Seconds in an hour 
60 -> Seconds in a minute. 

나는이 욕심 CALC를 할 노력하고있어,하지만 나에게 값을 제공합니다 3D 2 시간 122m 7321s

을하지만 할 수 없습니다 122m이면, 시간이 있어야합니다. 나는 내 잘못이 어디인지 이해하지 못한다. 도와 주시겠습니까? 미리 감사드립니다.

+2

컴파일러 경고에주의하십시오. 문제가되는 행은'이 표현식에는 'unit'유형이 있어야하지만 'bool'유형이 있습니다. 표현식의 결과를 버리려면 '무시'를 사용하고 결과를 이름에 바인드 시키려면 'let'을 사용하십시오. – Daniel

답변

9

내장 기능을 활용하면 어떨까요?

> 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" 
+0

사실, 연습은 구체적인 예에서 F # 코딩으로 미묘한 부분을 지적하는 데 가치가 있습니다. –

2

F #에서 값이 변경 불가능 (변경 불가능)하기 때문입니다. 값 "남은"값 7321, 첫 번째 값을 유지합니다. 이는 스레딩 및 데이터 공유를 돕기 위해 수행됩니다.

let mutable leftover = sum % 86400 
leftover <- leftover % 3600 
0

leftover = leftover % 3600 

아마로 평가되는 leftover (leftover % 3600에 비교하는 부울 식입니다 라인 : 어느하게 변경 가능한 값을 "남은"의 값을 변경할 때 새 값을 만들거나, 그렇지 않으면 그릇된). 당신이해야 할 일은,

let leftover' = leftover % 3600 

을 새 값을 할당하고 이후 leftover'을 사용하는 것입니다.

관련 문제