2011-01-05 3 views
0

저는 파이썬에서 가벼운 (1 학년 CS) 배경을 가진 총 C# newb입니다. 나는 마라톤 속도로 실행하는 계산을 수행 파이썬에서 콘솔 프로그램을 작성하고 내가 여기에 지금까지있어 어떤 덩어리의 Visual Studio 2010에서 Visual Studio 2010를 사용하여 C#에서이 구문을 이해하려고 노력 해요 :Newbie C# float/int/text 형식 형식에 대한 질문

string total_seconds = ((float.Parse(textBox_Hours.Text) * 60 * 60) + (float.Parse(textBox_Minutes.Text) * 60) + float.Parse(textBox_Seconds.Text)).ToString(); 

float secs_per_unit = ((float)(total_seconds)/(float)(textBox_Distance.Text)); 
float mins_per_unit = (secs_per_unit/60); 

string pace_mins = (int)mins_per_unit.ToString(); 
string pace_secs = (float.Parse(mins_per_unit) - int.Parse(mins_per_unit) * 60).ToString(); 


textBox_Final_Mins.Text = pace_mins; 
textBox_Final_Secs.Text = pace_mins; 

마일 당 8 분 30 초의 달리기 속도를 상상해보십시오. secs_per_unit은 510이고, mins_per_unit은 8.5입니다. pace_mins는 간단히 8이고 pace_secs는 30이됩니다. 파이썬에서는 변수를 부동 소수점에서 문자열로 변환하여 8.5 대신 8을 얻습니다. 코드의 나머지 부분에서 내가하고있는 것에 대한 아이디어를 얻을 수 있기를 바랍니다.

모든 의견을 보내 주시면 감사하겠습니다.

+0

textBox_final_Mins 및 textBox_Final_Secs에서 현재 얻고있는 것을 지정하는 것이 좋습니다. 그리고, 당신이 거기에서 원하는 것 –

답변

0

cast operators and conversion functions을 사용할 수 있습니다.

double d = 1.2; 
int i = (int)d; 

이것은 변환 될 것이다 :

이 캐스팅 될

문자열로 플로트를 들어
string s = "1"; 
int i = Convert.ToInt32(s); 
1

당신이 부분을 차단하려는 경우

.ToString("F0") 

그것을 당신이 당신의 질문을 수정한다면 더 좋을 것입니다.

0

시간과 분은 이미 초가 걸렸으므로 정수만 사용해야합니다 (단 2 시간 0 분이 아닌 1.5 시간 30 분이 아님).

var numHours = Convert.ToInt32(textBox_Hours.Text); 
var numMinutes = Convert.ToInt32(textBox_Minutes.Text); 
var numSeconds = Convert.ToDouble(textBox_Seconds.Text); 

var totalDistance = Convert.ToDouble(textBox_Distance.Text); 

var totalSeconds = ((numHours)*60) + numMinutes)*60 + numSeconds; 

var secsPerUnit = totalSeconds/totalDistance; 
var minsPerUnit = secsPerUnit/60; 

var paceMinsStr = Math.Floor(minsPerUnit).ToString(); 

var paceSeconds = minsPerUnit - Math.Floor(minsPerUnit); 
var paceSecondsStr = (paceSeconds/ 100 * 60).ToString(); 

신속하게 작성되었지만 테스트를 거치지는 않았지만, 적어도 약간의 개조/오타 수정이 있어야 작동합니다.

0

시도해보십시오. 전체적으로, 플로트로 저장하고 정수로 여러 번 변환하는 것보다 더 많은 것을 정수로 저장하십시오. 마지막 순간까지 문자열로 변환하지 마십시오.

// I'm assuming that the text boxes aren't intended to hold a fraction, 
// "8.5", for example. Therefore, use 'int' instead of 'float', and don't 
// convert to a string at the end. 
int total_seconds = int.Parse(textBox_Hours.Text) * 60 * 60 + 
        int.Parse(textBox_Minutes.Text) * 60 + 
        int.Parse(textBox_Seconds.Text); 

// you missed a Parse here. 
// Use two separate variables for seconds per unit: 
// one for the total (510, in your example), one for just the seconds 
// portion of the Minute:Second display (30). 
int total_secs_per_unit = (int)(total_seconds/float.Parse(textBox_Distance.Text)); 

int mins_per_unit = total_secs_per_unit/60; 
int secs_per_unit = total_secs_per_unit % 60; 

string pace_mins = mins_per_unit.ToString(); 
string pace_secs = secs_per_unit.ToString(); 

textBox_Final_Mins.Text = pace_mins; 
textBox_Final_Secs.Text = pace_secs; 
관련 문제