各地区的数字系统问题

问题描述 投票:0回答:1

我正在Unity中开发一个项目,在这个项目中,我使用.CSV文件来收集数据,以便在项目中使用。一个重要的事实是,我开发的项目的操作系统(OS)区域是西班牙语(西班牙,国际)。

我使用这个.CSV文件来列出我想让我的角色在游戏中执行的动作,比如从当前位置移动到A点,或者在该位置静止X秒。在.CSV文件中,我将数据保存为字符串,但当我在项目中引入数据时,我需要将其作为一个浮点数。

  • MOVE: float Velocity, float Position.x, float Position.y, floatPosition.z.
  • WAIT: float Time

任何一个动作都被附加到一个接收动作的对象上,它都能完美执行。

问题来了,当我把构建的项目发给Steam验证时,他们通知我说无法推进,因为角色没有移动(游戏工作,但没有任何移动)。

经过多次测试,我找到了问题所在。原来,如果项目的构建执行的操作系统是在与西班牙语(西班牙,国际)不同的地区,比如在英语(英国),游戏就会运行,但在我最初编程的时间内没有任何动作。

这个问题是因为每个地区有不同的小数系统,例如,在西班牙,点用来表示单位,逗号表示小数("1.234,24"),而在英国则相反("1,234.24"),因此,如果我声明我的角色将等待(WAIT) "0,2 "秒(西班牙),在OS的英语(英国)地区,它将是 "20 "秒,因为它将逗号解释为单位分隔符。同样的情况也发生在MOVE动作上。

为了不改变我的操作系统的区域,我把.CSV中的逗号改成了点,以便把问题移到我的区域并进行必要的测试。所以我可以证明,如果我把 "3.00" (应该是3秒)我的操作系统将其解释为3分钟。

我的问题是。我怎样才能解决这个问题,使定时器按照我的要求工作,不管操作系统在哪个区域运行?

我试图通过将点改为逗号来进行从字符串到浮点的手动解析,但我意识到即使我在我的区域中修正了错误,它也会移动到另一个区域。

有没有办法配置项目,使其始终使用独立于操作系统的特定数字系统? 我的意思是,将逗号理解为小数,并将其用于该目的,无论区域是什么。

我试过 System.Globalization.CultureInfo但我什么也没得到(或者我没有完全理解)。

有什么方法可以创建一个在任何地区都能使用的手动解析器吗?

非常感谢您。

c# csv unity3d
1个回答
4
投票

你是在正确的路径上开始寻找System.Globalization的。你只需要使用不变的文化---------------------------------------------。CultureInfo.InvariantCulture是什么意思?-你可以指定在转换为字符串和解析字符串回到所需类型时使用它,比如。

using System.Globalization;
using System.IO;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var ci = CultureInfo.InvariantCulture;

            double x = 0.123;
            using(var sw=new StreamWriter("someFile"))
            {
                sw.Write(x.ToString(ci));
            }

            using (var sr=new StreamReader("someFile"))
            {
                string line = sr.ReadLine();
                x = double.Parse(line, ci);
            }
        }
    }
}

1
投票

我想这是一个字符串问题。而我对字符串有这些基本规则。

  1. 如果可以避免的话,不要把一个值存储,检索或传输为字符串。在处理中,字符串是第二差的数据类型。只有原始二进制更差。在CSV中,你必须使用它们,但是一个合适的DB--即使是在prcoess中--也不应该有这样的限制。
  2. 如果你必须使用字符串来存储,检索或传输,确保你选择一个固定的文化和字符串编码的所有端点。.NET默认情况下会尝试从windows中检索适当的设置,但你不希望这样做。一个固定的设置是我们的目标。你真的不希望在字符串处理中增加文化或编码问题
  3. 大多数用于数据存储的高级类--如REST或XML处理程序--已经为你处理了这两个问题。它们甚至可以为你处理解析问题。所以你应该更喜欢它们,而不是老式的.CSV文件。
© www.soinside.com 2019 - 2024. All rights reserved.