float.Parse больше не работает в Unity (C #) - PullRequest
0 голосов
/ 18 мая 2018

У меня был рабочий проект со следующими строками кода

 public InputField mass;
 float val = float.Parse(mass.text);

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

Сегодня я вернулся, чтобы внести некоторые изменения, перед тем как я протестировал его и получил эту ошибку.

FormatException: неверный формат.System.Double.Parse (System.String s, стиль NumberStyles, поставщик IFormatProvider) (в /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Double.cs:209) System.Single.Parse (System.String s) (в /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Single.cs:183) ControlMasa.Update () (в разделе Активы / Сценарии / ControlMasa.cs: 47)

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

В чем проблема, что я могу сделать?

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Исходя из вашего вопроса

InputField mass = null; // assign this first
float mass_ = "0.1f" //sample value
if(float.TryParse(mass.text, out mass_))
{
    /// everything is ok
}
else
{
    /// something wrong. mass.text has incorrect float value
}

Попробуйте вместо Parse a TryParse function.

0 голосов
/ 18 мая 2018

Вы не назначаете FormatProvider, что может вызвать ошибки в зависимости от вашей системы.Вы можете попробовать

float var = float.Parse(mass.text, CultureInfo.InvariantCulture);

, учитывая, что mass.text всегда будет действительным числом с плавающей точкой.Поскольку вы имеете дело с Unity, вы также можете попробовать

float var = float.Parse(mass.text, new CultureInfo("en-US").NumberFormat);

, который всегда будет анализировать число с плавающей точкой в ​​стандартном американском формате (с точкой).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...