如何修复小数分隔符有问题的应用程序

Luk*_*don 8 .net c# localization decimal-point

这篇文章是关于C#和.Net的,但有些信息对其他技术很有价值.

因为我记得,因为解析十进制数字的风格不同,我一直遇到崩溃的应用程序或游戏问题.它经常发生,从CAD应用程序,库到网页.我不确定这是无知还是缺乏知识,但这真的很烦人.

有什么问题?是一篇关于它的维基文章,但它很简短:

这是一张地图,显示世界各地使用的小数点分隔符(小数点). 不同小数分隔符的地图

小数标记:

  • 期间 - 蓝色
  • 逗号 - 绿色
  • 非西方阿拉伯数字 - 红色
  • 未知 - 灰色

大多数欧洲,南美洲写1 000 000,00或1000000,00有时1.000.000,00与"帝国"相反(标记为蓝色)写入1,000,000.00

让我来谈谈我上个月遇到的所有问题.

  1. 网页上的数字难以阅读:让我们看一下观看次数最多的YT视频.它向我展示了390159851.超过一百万的数字很难读,数量级是多少?是39毫升还是390?
  2. 适用于Windows Phone 7的 Mirosoft XNA示例:有一个非常简洁的类可解析XML文件以生成XNA动画

    /// <summary>
    /// Loads animation setting from xml file.
    /// </summary>
    private void LoadAnimiationFromXML()
    {
        XDocument doc = 
                  XDocument.Load("Content/Textures/AnimationsDefinition.xml");
        XName name = XName.Get("Definition");
        var definitions = doc.Document.Descendants(name);
    
    
            if (animationDefinition.Attribute("Speed") != null)
            {
                animation.SetFrameInvterval(TimeSpan.FromMilliseconds(
                    double.Parse(animationDefinition.Attribute("Speed").Value)));
            }
    
    Run Code Online (Sandbox Code Playgroud)

    double.Parse抛出异常,一个简单的灵魂就是使用XmlConvert.ToDouble();或解析InvariantCulture.

  3. 使用CSV文件将输入向量存储为CSV的.Net应用程序 - 也会抛出.

  4. 另一个在类中有一些解析的.Net应用程序 - 抛出.

那我们怎么解决这个问题呢?

  • 修复代码中的错误 - 只能使用可用的源代码并且单调乏味.
  • 更改数据(CVS,XML等) - 即使有可能,也不会对改变数据感到满意.
  • 更改操作系统默认小数分隔符 - 不会发生.

有没有其他方法来解决这个问题?我可以让应用程序保持不变吗?就像在不同的环境中启动应用程序一样.

PS.我想运行该应用程序,但我没有代码.

cod*_*nix 6

正确设置Thread.CurrentThread.CurrentCulture,你不会有这样的问题.在这里阅读如何编写与文化无关的代码.

编辑:如果您无权访问代码,则可以在具有预期文化集的用户帐户下运行该应用程序.为了快速访问,您可以创建一个英语用户,一个德国用户,一个法国用户..