我如何将字符串中带点的负浮点数转换为 C# 中带点的负浮点数?
How i can convert Negative Float with point in String to Negative Float with Point in C#?
我有一个带点的负浮点数字符串,它看起来像这样:
-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
这是一个带负数的字符串。
您需要强制文化信息使用点表示小数。
因为您机器的区域设置可能使用逗号表示小数。
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);
我有一个带点的负浮点数字符串,它看起来像这样:
-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
这是一个带负数的字符串。
您需要强制文化信息使用点表示小数。 因为您机器的区域设置可能使用逗号表示小数。
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);