2016-12-03 5 views
2

は、私は1.50を入力すると、結果が間違っている90秒であるため、分テキストボックスに、私は問題を抱えている瞬間秒にして分単位を変換するため、1.30 = 90秒のTimeSpan変換

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分、すなわち1分半は、90秒に対応する正しいです... –

+1

1分は60秒です。したがって、 '1.5 * 60 = 90' –

答えて

-2

秒から分に変換するには、60.0で分割する必要があります(小数点が必要な場合、または整数のように扱われます)。整数のように扱い、30秒を渡すと30/60は0になります。

double.TryParseメソッドも使用します。今、誰かが1.50xxを入力すると、アプリケーションがクラッシュします。 double.TryParseメソッドを使用するか、try catchメカニズムを使用するか、数値入力のみを許可してください。

EDIT

これは、あなたが望むものを達成します。出力を表示するラベルを追加しましたが、削除することができます。

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秒に等しくなるので、あなたは秒に分を変換されていません。これは論理的で明白です。 10進数の前の部分のみを分として扱い、10進数の後の部分を秒として扱います(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秒ではありません。でも私は誤解を招き、その行に答えを投稿しました。しかし、2番目の考えでは、ここではカンマを小数点区切り記号として使用し、それは時間区切り記号として決して使用されません。実際には、ここに1,45を入力すると、1分45秒ではなく小数点以下の分のように表示されます。だから私は自分の答えを削除し、@パオロのupvotedそれはどこでも働くので、あなたのヨーロッパのほとんどで失敗するでしょう。もちろん、米国の環境でしか動作しない場合、これはすべて無視することができます。しかし、池のこの側では、そのような問題は毎日の懸念です。 – Gustav

2

ます別の方法でテキストの変換を処理する必要があります。 "1.50"をダブルに直接変換しています。これは1.5と1で、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秒ののTimeSpanを生成します。

あなたは時間を毎回指定する必要はありませんので、フォーマット文字列を指定して、あなたもセパレータとしてドットを指定することができますすることができます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のはほとんど知識を持っている人のために、この方法は複雑すぎる作り()の値が格納されている分、またはテキストボックスに何を置くことができ、データを入力してくださいカント申し訳ありませんが、私はあなたのコメントで尋ねているものを理解していません... –

関連する問題