C# 输入中的字符串未转换(格式错误)
重要编辑!!!!!!! (我还编辑了代码)C# 输入中的字符串未转换(格式错误),c#,string,vector,C#,String,Vector,重要编辑!!!!!!! (我还编辑了代码) 我发现当我做string[]pos=value.Split(',')和其他,它做正确的事情,但这里是交易 在unity中,字符串中的小数由,表示,因此当我执行字符串[]pos=value.Split(',')他按找到的前3个逗号进行拆分,如果您检查我刚刚修改的样本数据,并拆分前3个逗号,您将得到实际结果 我还设法修好了秤 原职: 我正在尝试学习unity,为了有一个好的保存/加载系统,我遵循了unity(注意,我删除了行value=value.Rep
我发现当我做
string[]pos=value.Split(',')代码>和其他,它做正确的事情,但这里是交易
在unity中,字符串中的小数由,
表示,因此当我执行字符串[]pos=value.Split(',')代码>他按找到的前3个逗号进行拆分,如果您检查我刚刚修改的样本数据,并拆分前3个逗号,您将得到实际结果
我还设法修好了秤
原职:
我正在尝试学习unity,为了有一个好的保存/加载系统,我遵循了unity(注意,我删除了行value=value.Replace(“,”);
,因为不需要它):
我认为这里有一个错误,因为如果我在另一个函数中使用上述函数,X轴工作正常,其他两个(Y和Z)则不正常:
public virtual void Load(string[] values)
{
// in in the variable values[] i have in these positions:
// values[0] objectname, values[1] (x,y,z) position, values[2] (x,y,z) scale
transform.localPosition = SaveGameManager.Instance.StringToVector(values[1]);
transform.localScale = SaveGameManager.Instance.StringToVector(values[2]);
}
样本数据
string position = "(190,0, 2,5, 180,0)";
string scale = "(5, 5, 5)";
预期结果
-职位:
-比例:
实际结果
-职位:
-比例:我发现了一种99%的解决方案
value = value.Trim('(', ')');
value = value.Replace(" ","");
string[] pos = value.Split(',');
return new Vector3(float.Parse(pos[0]), float.Parse(pos[1]), float.Parse(pos[2]));
在value=value之后添加这段代码。替换(“,”)代码>
替换返回新的向量3(float.Parse(pos[0])、float.Parse(pos[1])、float.Parse(pos[2])代码>
使用返回新向量3(float.Parse(位置[0])、float.Parse(位置[2])、float.Parse(位置[4])代码>
这很有效,因为我只是在应该的地方加了一个逗号,仅此而已
在unity中,字符串中的小数由,
只有当您的计算机使用的区域设置是正确的时,这才是正确的。Unity在Vector3.ToString()
中使用float.ToString()
,并且float.ToString()
尊重您电脑的设置
尝试放置Thread.CurrentThread.CurrentCulture=new CultureInfo(“en-US”,false)在场景中任何对象的唤醒函数中,使用code>强制将区域设置和句点作为十进制分隔符
编辑:如果您想继续使用逗号作为小数分隔符,这应该可以:
string[] numbers = value
.Replace("(", "")
.Replace(")", "")
.Replace(", ", "/")
.Split('/');
Vector3 v = new Vector3(float.Parse(numbers[0]), float.Parse(numbers[1]), float.Parse(numbers[2]));
我编辑了原始帖子,这里看起来很奇怪你确定你的输入是你认为的吗?它没有改变任何东西。在Load
方法中设置一个断点,并检查值
以确保输入是您所想的。然后逐步检查代码,看看是否有问题。@RufusL不幸的是,我已经尝试过了,加载函数的输入中给出的所有内容都可以正常工作。您发布的代码运行良好。能否显示对Load
的确切调用(包括字符串数组值)?
pos[0] = pos[0] + ',' + pos[1];
pos[2] = pos[2] + ',' + pos[3];
pos[4] = pos[4] + ',' + pos[5];
string[] numbers = value
.Replace("(", "")
.Replace(")", "")
.Replace(", ", "/")
.Split('/');
Vector3 v = new Vector3(float.Parse(numbers[0]), float.Parse(numbers[1]), float.Parse(numbers[2]));