【问题标题】:How can I detect french or us culture from string decimal format?如何从字符串十进制格式检测法语或美国文化?
【发布时间】:2016-11-17 08:47:55
【问题描述】:

我有两个字符串:1.51,5

我想将其转换为十进制,但我想自动检测文化:用点我们文化和逗号 fr 文化

最好的方法是什么?

【问题讨论】:

  • 您不能 100% 确定地执行此操作,因为逗号可能表示德国或俄罗斯文化,而圆点可能表示美国或英国文化。
  • 更糟糕的是,1,543 是什么意思?可能是1.5431543,具体取决于文化。
  • 如果你想遵循的规则就那么简单那么就照你说的去做,找一个要点,如果你找到了,那么你就有了我们的文化,如果你找到了逗号那么你就有了 fr 文化。这里的问题是什么? 完全按照您的要求进行操作的最佳方法是 1-2 个 if 语句。
  • 另一方面,如果这两种文化只是您想要的示例,并且您想要全方位的文化,那么不,那是做不到的。就这么简单。
  • 如何简单地获取我的字符串的 NumberDecimalSeparator ?我想得到一个字符。谢谢

标签: c# cultureinfo


【解决方案1】:

如果你的数字不能包含千组分隔符,你可以使用这个:

var usCulture = new CultureInfo("en-US");
var frCulture = new CultureInfo("fr-FR");
NumberStyles ns = NumberStyles.Any & ~NumberStyles.AllowThousands;  // without thousands

string[] strings = {"1.5", "1,5"};
foreach (string s in strings)
{
    decimal d;
    bool isUsCulture = decimal.TryParse(s, ns, usCulture, out d);
    bool isFrCulture = decimal.TryParse(s, ns, frCulture, out d);
}

请注意,您现在可以检测文化,但前提是它包含小数分隔符。像“2”这样的数字可以是 us 或 fr。

【讨论】:

  • 如果我可以附上这个问题...如果我在多个国家/地区有一个具有不同数字样式的应用程序,那么将值(数字)添加到我的数据库并制作数字“通用”?
  • @FiN:没有“通用”数字,但您可以指定文化。但是,您的问题没有意义,因为数字应该存储为数字而不是字符串,f.e.作为DECIMAL(18,4)
  • 这就是我问的原因,如果我得到字段的值,上面写着1,24 会发生什么......它会将其保存到数据库中作为1.24 还是......
  • 这取决于您没有显示的代码。 decimal.TryParse(s, ns, frCulture, out d) 会将其解析为小数。然后只需使用带有SqlDbType.Decimal 的sql 参数。当然在数据库中也必须是小数。
  • 这只是一个问题,没有动手...感谢您的建议:)
【解决方案2】:

你可以试试这个: 您首先在函数程序中插入此代码。
您使用分隔符"." 如:decimal.Parse("0.2")

var usCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = usCulture;
Thread.CurrentThread.CurrentUICulture = usCulture ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    相关资源
    最近更新 更多