新手C#关于float / int / text类型格式的问题

时间:2011-01-05 05:36:19

标签: c# types floating-point integer

我是一个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;希望其余代码能让您了解我一直在做的事情。

任何输入都将不胜感激。

4 个答案:

答案 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);