我是一个C#newb,拥有Python的轻量级(第一年CS)背景。我用Python编写了一个控制台程序,用于进行马拉松速度运行计算,我正在尝试使用Visual Studio 2010在C#中找出它的语法。这是我迄今为止所获得的一大块:
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.在Python中我只是将变量从float转换为字符串,例如得到8而不是8.5;希望其余代码能让您了解我一直在做的事情。
任何输入都将不胜感激。
答案 0 :(得分:2)
如果要切除分数
,则浮动到字符串.ToString("F0")
如果你改写你的问题会更好。
答案 1 :(得分:1)
小时和分钟应该只取整数,因为你已经花了几秒钟(没有意义的是有1.5小时30分钟而不是2小时0分钟。)
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();
写得很快,没有测试过..但是这样的事情应该有用,至少是非常小的调整/拼写错误修复。
答案 2 :(得分:1)
试试这个。总的来说,将事物更多地存储为整数,而不是存储为浮点数并多次转换为整数。并且直到最后一刻才转换为字符串。
// 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;
答案 3 :(得分:0)
您可以使用cast operators and conversion functions。
这将是演员:
double d = 1.2;
int i = (int)d;
这将是转换:
string s = "1";
int i = Convert.ToInt32(s);