2016-12-03 120 views
2

我想分轉換爲秒,在現階段,我有一個問題,因爲在分鐘文本框,當我鍵入1.50的結果爲90秒,這是錯誤的,因爲1.30 = 90秒時間跨度轉換

private void MtoCbutton_Click(object sender, EventArgs e) 
    { 
     if (minTosecTextBox.Text != "Minutes") 
     { 
      minutes = Convert.ToDouble(minTosecTextBox.Text); 
      TimeSpan span = TimeSpan.FromMinutes(minutes); 
      resultSectextBoxtextBox.Text = span.TotalSeconds.ToString(); 
     } 

     else 
     { 

      MessageBox.Show("Please enter Minutes"); 
     } 
+2

這是正確的,1.5分鐘,即一分鐘半,對應到90秒...... –

+1

一分鐘60秒。因此'1.5 * 60 = 90' –

回答

-2

要將秒數轉換爲分鐘,您只需將其除以60.0(您需要小數或將其視爲整數)。如果看上去像一個整數,你通過30秒,30/60將等於0.

也使用double.TryParse方法。現在,如果有人輸入1.50xx,你的應用程序將崩潰。使用double.TryParse方法或使用try catch機制或僅允許數字輸入。

編輯

這將完成你想要的。我添加了一個標籤來顯示輸出,但您可以將其刪除。

double enteredNumber; 
if (double.TryParse(minTosecTextBox.Text, out enteredNumber)) 
{ 
    // This line will get everything but the decimal so if entered 1.45, it will get 1 
    double minutes = Math.Floor(enteredNumber); 

    // This line will get the seconds portion from the entered number. 
    // If the number is 1.45, it will get .45 then multiply it by 100 to get 45 secs 
    var seconds = 100 * (enteredNumber - Math.Floor(enteredNumber)); 

    // now we multiply minutes by 60 and add the seconds 
    var secondsTotal = (minutes * 60 + seconds); 

    this.labelSeconds.Text = secondsTotal.ToString(); 
} 

else 
{ 

    MessageBox.Show("Please enter Minutes"); 
} 

EDIT 2

一些進一步澄清

您還沒有轉化分鐘,秒,因爲如果你再1.5(1分半鐘),就等於90秒。這是合乎邏輯和明顯的。您只將小數部分作爲分鐘,將小數部分作爲秒數(1.30 = 1分30秒= 90秒)。 因此,我們只需要將小數點前的部分轉換爲秒,並將小數點後的部分添加到它。

+0

此方法在小數點分隔符不是點的所有環境中都會失敗。例如,「1.45」在歐洲大部分地區不會返回105但8700秒。使用@Paolo的答案。 – Gustav

+0

感謝評論,但爲什麼有人會在法國輸入1.45,例如,如果他們的小數點是逗號。他們將輸入1,45(逗號),它會產生105秒。我提出這個答案的原因是因爲OP想要一個簡單的答案。上述作品並不會失敗。嘗試一下,它會在每個地方(環境)都有效。 – CodingYoshi

+0

不,1.45小數分鐘是87秒,而不是105.但是我也誤導了,我甚至發佈了一個答案。然而,再次想到,這裏我們使用逗號作爲小數分隔符,並且它永遠不會被用作時間分隔符;事實上,在這裏輸入1,45肯定會被讀成十進制分鐘,而不是1分45秒。所以我刪除了我的答案,並提出了@ Paolo的答案,因爲它可以在任何地方工作,而你的歐洲大部分地區都會失敗。當然,如果只在美國環境下運營,這一切都可以忽略。但在池塘的這一邊,這些問題每天都是關注的問題。 – Gustav

2

你需要以不同方式處理文本的轉換。您將「1.50」直接轉換爲1.5倍和1.5倍,1/2分鐘將相當於90秒。如果你想允許用戶輸入「1.50」,意思是1分50秒,那麼你需要分割字符串。你可以做這樣的事情:

var split = text.Split('.'); 
int seconds = 0; 
if (split.Length > 1) 
{ 
    seconds = int.Parse(split[1]); 
} 
seconds += TimeSpan.FromMinutes(split[0]).Seconds; 

注意 - 如果你不驗證文本,比你最終可能會失敗。你應該使用TryParse來驗證秒數。解析可以拋出異常。

+0

TimeSpan.Parse是一個更好的解決方案 – Winter

+0

@Winter - 除了它在這個字符串上是個例外,因爲它不是有效的格式。 – pstrjds

+0

這是一個例子,他可以改變格式,而你的例子不能。 – Winter

7

您可能正在尋找類似的TimeSpan.Parse方法:

var ts = TimeSpan.Parse("00:01:30"); 

這將產生90秒的時間跨度。

還有一個ParseExact方法,它可以讓你指定一個格式字符串,這樣你就不必每次都指定時間,並讓您甚至可以指定一個點作爲分隔符:

var ts = TimeSpan.ParseExact("01.30", @"mm\.ss", System.Globalization.CultureInfo.InvariantCulture); 

格式字符串請參見Custom Date and Time format strings

另請注意,您需要轉義字面解釋的每個字符(因此.之前的\)。對於你的情況

全碼:

var ts = TimeSpan.ParseExact(minTosecTextBox.Text, @"mm\.ss", System.Globalization.CultureInfo.InvariantCulture); 
resultSectextBoxtextBox.Text = ts.TotalSeconds.ToString(); 
+0

我無法自己輸入數據,所以我可以在()存儲值的分鐘或文本框中輸入來自 –

+1

的值的數據,對於對c#知識很少的人來說,這樣做太複雜了 –

+0

@MMobeenKhan對不起,我不明白你在問你的評論... –