два поплавка все еще округляются после преобразования?

Итак, я пытался взять два числа с плавающей запятой и разделить их, но кажется, что это всегда дает мне 0 или бесконечность.

Я знаю, что это происходит с целыми числами (но я использую числа с плавающей запятой). Кажется, что это усекается где-то в моих конверсиях. я знаю, что это какой-то дерьмовый код, но я делал это однажды, просто не помню, как, и это тоже было очень плохо сделано.

Поэтому я надеюсь, что кто-то может показать мне правильный способ разделить две переменные типа float.

Я хочу иметь поплавок, который будет увеличиваться в день на основе заданного ввода.

По умолчанию для суммы установлено значение 1.23456789. Но кажется, что мне всегда дают 0 или 00 после попытки разделить их как преобразованную переменную, так как я могу вручную вводить значения с плавающей запятой, и, кажется, все в порядке.

string charc = Settings.Default["Day"].ToString();
DateTime checkme = DateTime.Parse(charc);
DateTime now = DateTime.Now;
string daysleft = (checkme - now).Days.ToString();
float.TryParse(daysleft, out float daysnum);
textBox3.Text = daysnum.ToString();

float amount = Settings.Default["Amount"];
float Total = amount / daysnum;

person pOleander    schedule 12.02.2018    source источник
comment
Обратите внимание, что это код C#, было бы полезно упомянуть его и пометить.   -  person dmitryro    schedule 12.02.2018
comment
В этом коде больше дыр, чем в Титанике... На самом деле Титаник выглядит непотопляемым по сравнению с этим   -  person TheGeneral    schedule 12.02.2018
comment
Учитывая I can manually input the floats values and it seems to be just fine., это, вероятно, усечение во время преобразования в какой-то момент. Вы используете много string промежуточных продуктов без видимой причины. Преобразование в строку только тогда, когда вам нужна строка. Вы можете напрямую приводить целые числа к float.   -  person Corey    schedule 12.02.2018
comment
о, ну, LOL, это имеет больше смысла, но для меня это также выглядит пугающе, любой, кого я вижу сейчас, действительно указывает мне правильное направление, я пойду поищу еще немного о рефакторинге и не буду так возиться в будущем.   -  person pOleander    schedule 12.02.2018
comment
Суть всех преобразований заключалась в том, чтобы установить текстовые поля, но я просто сделал это ужасно, LOL, спасибо, исправлю.   -  person pOleander    schedule 12.02.2018


Ответы (1)


Примечания

  • Вам действительно следует подумать о том, чтобы называть ваши переменные более лаконично.
  • Если что-то является строкой и вам нужно ее проанализировать, проверьте наличие ошибок
  • У вас тоже были всякие конверсии и дурачества творились

Однако это должно указать вам правильное направление

Рефакторинг кода

var dayString = Settings.Default["Day"].ToString()); // Some day From Settings

if (!DateTime.TryParse(dayString, out var someDay))
{
   throw new ApplicationException($"Invalid input date : {dayString}");
   //return; // return if not a valid date stored in settings
}

var daysLeft = ( DateTime.Now - someDay).Days; // days left as int (number)

textBox3.Text = daysleft.ToString();

var amountString = Settings.Default["Amount"]; // Some amount From Settings

if (!double.TryParse(amountString, out var amount))
{
   throw new ApplicationException($"Invalid input Amount : {amountString}");
    //  return; // return if not a valid double stored in settings
}

var total = amount / daysLeft;

Обновлено, чтобы выдать ApplicationException, если ваш ввод не может быть проанализирован. По крайней мере, это покажет вам, что что-то пошло не так и почему

person TheGeneral    schedule 12.02.2018
comment
Вместо того, чтобы писать свои собственные исключения (у которых есть много вещей, которые следует учитывать: codeproject.com/Articles/9538/), вы должны начать с того, чтобы просто разрешить выход .NET. Parse счастлив генерировать исключения, иногда даже слишком счастлив. Это генерирование исключений часто настолько неприятно, что TryParse был добавлен как альтернатива, не являющаяся исключением. - person Christopher; 12.02.2018
comment
@Christopher Кристофер, все хорошие моменты, однако исключения сводились к минимизации следующего ответа, это не работает! - person TheGeneral; 12.02.2018
comment
@TheHomie на самом деле правильный подход. вы просто означает что-то, когда неправильно. Другой - исключение. другой - просто вернуться, не продолжая. это зависит от того, как далеко в кроличью нору вы хотите зайти - person TheGeneral; 12.02.2018
comment
Если вы хотите погрузиться в кроличью нору в отношении исключений, вот две статьи, которые стоит прочитать (на одну я уже ссылался выше): blogs.msdn.com/b/ericlippert/archive/2008/09/10/ codeproject.com/Articles/9538/ Они помогли мне разобраться с обработкой исключений и, таким образом, пока я ни разу не слышал нареканий на них. - person Christopher; 12.02.2018