Как я могу конвертировать Отрицательное с плавающей точкой с точкой в ​​строке в Отрицательное с плавающей точкой с точкой в ​​C #? - PullRequest
0 голосов
/ 12 октября 2018

У меня есть строка с отрицательным числом с плавающей точкой с точкой, и она выглядит так:

-1.0

И мне нужно преобразовать ее в число с плавающей точкой, поэтому она должна быть:

-1.0f

Я пробовал это:

bool isNegative = false; //float in my string isnt a negative
string mystr = "-1.0"; //my string
float myfloat = 0.0f; //my float

if(mystr.Contains("-")) 
{ 
    isNegative = true; 
    mystr.Replace("-"); 
} //if my string is negative,set a bool to true,and remove - from string

if(isNegative==true) 
{ 
    myfloat = float.Parse(mystr) * -1.0 
} //if bool is true(is says number in string is negative),parse string to float and make it negative
else 
{ 
    myfloat = float.Parse(mystr) 
} //if bool is false(number in string isnt negative),just parse a number

Этот код работает, я думаю, но он выдает System.FormatException, так что я думаю, что получил это исключение, потому что код не может проанализировать строку с точкой (.). Я получил исключение при методе float.Parse.

Если вы хотите, я покажу полный код, где я получил ошибку, верхний кодпросто концепция моего реального кода, есть настоящий код:

bool redNeg = false; //red number isnt negative
bool greenNeg = false; //blue number isnt negative
bool blueNeg = false; //green number isnt negative
string[] args = GetArgs.ExtractArguments(LineText); //get strings from "translate(0.0,0.0,-1.0);"
string red = args[0]; //string1,default is 0.0
string green = args[1]; //string2,default is 0.0
string blue = args[2]; //string3,default is -1.0
if (red.Contains("-")) 
{ 
    redNeg = true; 
    red.Replace("-", ""); 
} //if string1 is negative,set negative bool to true and remove - from string

if (green.Contains("-")) 
{ 
    greenNeg = true; 
    green.Replace("-", ""); 
} //if string2 is negative,set negative bool to true and remove - from string

if (blue.Contains("-")) 
{ 
    blueNeg = true; 
    blue.Replace("-", ""); 
} //if string3 is negative,set negative bool to true and remove - from string

float redd = 0.0f; //default float of string1
float greenn = 0.0f; //default float of string2
float bluee = 0.0f; //default float of string3

if (redNeg==true) 
{ 
    redd = float.Parse(red) * -1.0f; 
} //if negative bool of string1 is true,set float to negative
else 
{ 
    redd = float.Parse(red); 
} //if its not,parse it

if (greenNeg == true) 
{ 
    greenn = float.Parse(red) * -1.0f; 
} //if negative bool of string2 is true,set float to negative
else 
{ 
    greenn = float.Parse(green); 
} //if its not,parse it

if (blueNeg == true) 
{ 
    bluee = float.Parse(red) * -1.0f; 
} //if negative bool of string3 is true,set float to negative
else 
{ 
    bluee = float.Parse(blue); 
} //if its not,parse it

gl.Translate((float)redd, (float)greenn,(float) bluee); //render function,dont touch it

После некоторых комментариев я отредактировал свой код для этого:

        var fmt = new NumberFormatInfo();
        fmt.NegativeSign = "−";
        //LineText is "translate(0.0,0.0,-1.0);
        string[] args = GetArgs.ExtractArguments(LineText); //get strings from "translate(0.0,0.0,-1.0);"
        string red = args[0]; //string1,default is 0.0
        string green = args[1]; //string2,default is 0.0
        string blue = args[2]; //string3,default is -1.0
        float redd = float.Parse(red,fmt); //default float of string1
        float greenn = float.Parse(green, fmt); //default float of string2
        float bluee = float.Parse(blue, fmt); //default float of string3
        gl.Translate((float)redd, (float)greenn,(float) bluee); //render function,dont touch it

Но у меня все еще есть исключение FormatException, но теперья получил его на

float bluee = float.Parse(blue, fmt); //default float of string3

Это строка с отрицательным числом.

1 Ответ

0 голосов
/ 12 октября 2018

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

 System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.InstalledUICulture;
            System.Globalization.NumberFormatInfo ni = (System.Globalization.NumberFormatInfo)ci.NumberFormat.Clone();
            ni.NumberDecimalSeparator = ".";

            string s = "-1.0";
            var result = float.Parse(s, ni);
...