默认情况下,C#将double/floats的字符串格式定义为US english

nei*_*eil 0 c# floating-point double locale

我有几千行的Web应用程序源代码,最初是在美国开发系统上编写的,用于维护.它大量使用SQL语句字符串,这些字符串是动态组合的,例如

string SQL = "select * from table where double_value = " + Math.Round(double_value, 2);
Run Code Online (Sandbox Code Playgroud)

不要评论糟糕的编程风格,在这种情况下这对我没有帮助:)

症结:我的系统使用德语语言环境,这反过来会导致错误的SQL语句,如下所示:

"select * from table where double_value = 15,5"
Run Code Online (Sandbox Code Playgroud)

(注意逗号为小数分隔符而不是点).

问题:为了防止被迫更改和检查每一行代码,在这种情况下将Web应用程序的区域设置更改为美国或英国的"最优雅"方式是什么?.NET 3.5不是一个选项(会让我有机会ToString()在扩展类中覆盖.)

Ree*_*sey 6

您不需要使用扩展方法,只需将ToString与IFormatProvider一起使用:

string SQL = "select * from table where double_value = " 
      + Math.Round(double_value, 2).ToString(CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)