Новичок C # Вопрос о форматировании типа float / int / text - PullRequest
0 голосов
/ 05 января 2011

Я абсолютный новичок в C # со светлым (первый год CS) фоном в Python.Я написал консольную программу на Python для выполнения вычислений в марафонском темпе и пытаюсь выяснить синтаксис этого в C # с помощью Visual Studio 2010. Вот часть того, что у меня получилось:

Представьте, что у вас бег на 8 минут 30 секунд на милю.secs_per_unit будет 510, mins_per_unit будет 8,5.pace_mins будет просто 8, а pace_secs будет 30. В Python я просто конвертирую переменные из числа с плавающей точкой в ​​строку, чтобы получить 8 вместо 8.5, например;надеюсь, остальная часть кода даст вам представление о том, что я делал.

Любой вклад будет оценен.

Ответы [ 4 ]

2 голосов
/ 05 января 2011

Для числа с плавающей точкой, если вы хотите отрезать дробь

.ToString("F0")

Было бы лучше, если вы перефразируете свой вопрос.

1 голос
/ 05 января 2011

Попробуй это. В целом, храните вещи как целые числа больше, а не как числа с плавающей точкой и конвертируйте в целые числа несколько раз. И не конвертируйте в строку до последнего момента.

// 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;
1 голос
/ 05 января 2011

Часы и минуты должны занимать только целые числа, поскольку вы уже берете секунды (не имеет смысла иметь 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();

Написанобыстро, не проверял ... но что-то вроде этого должно работать, по крайней мере, с очень незначительными исправлениями / опечатками.

0 голосов
/ 05 января 2011

Вы можете использовать операторы приведения и функции преобразования .

Это будет приведение:

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

Это будет преобразование:

string s = "1";
int i = Convert.ToInt32(s);
...