gpt4 book ai didi

c# - 跨区域小数/ double 解析

转载 作者:太空狗 更新时间:2023-10-29 23:39:25 26 4
gpt4 key购买 nike

事实上,我有多个可以生成数字数据的系统,它们以文本文件的形式存储在一些网络服务器上。有的系统使用小数点作为分数分隔符,有的系统同样使用小数点逗号。

应用程序(胖客户端、.net 2.0)也可以在任何一种系统上运行。

所以经过一些绊脚石我做了这个:(http://pastebin.com/vhLXABDD)

    public static bool HasDecimalComma;
public static bool HasDecimalPeriod;

public static double GetNumber(string NumberString)
{
if (!HasDecimalComma && !HasDecimalPeriod)
{
string s = string.Format("{0:0.0}", 123.123);
if (s.Contains('.'))
{
HasDecimalPeriod = true;
}
else if (s.Contains(','))
{
HasDecimalComma = true;
}
else
{
throw new SystemException(string.Format("strange number format '{0}'", s));
}
}
if (HasDecimalComma)
{
return double.Parse(NumberString.Replace('.', ','));
}
if (HasDecimalPeriod)
{
return double.Parse(NumberString.Replace(',', '.'));
}
throw new ArgumentException(string.Format("can't parse '{0}'", NumberString));
}

您能推荐更好、更优雅的方法吗?

编辑:

很抱歉之前没有提到它,并且由于您的回答倾向于那个方向 - 我无法用数字存储生成文化,我只能尝试“检测”它。

最佳答案

试试这个:

    static double GetDouble(string s)
{
double d;

var formatinfo = new NumberFormatInfo();

formatinfo.NumberDecimalSeparator = ".";

if (double.TryParse(s, NumberStyles.Float, formatinfo, out d))
{
return d;
}

formatinfo.NumberDecimalSeparator = ",";

if (double.TryParse(s, NumberStyles.Float, formatinfo, out d))
{
return d;
}

throw new SystemException(string.Format("strange number format '{0}'", s));
}

关于c# - 跨区域小数/ double 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18571579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com