1

我正在尝试在我的应用程序中使用以下代码,它仅在法语操作系统中引发异常。你能帮我解决这个问题吗?

using System.Globalization;
using System.Threading;

....
CultureInfo pro = new CultureInfo(Thread.CurrentThread.CurrentCulture.Name);
SqlCmd.Parameters[Dat.ColumnName].Value = Convert.ToDecimal("0.000001",pro);
4

3 回答 3

6

这不是法语中的有效小数。在法语中,小数点符号是逗号。

如果你的字符串总是有一个句点作为十进制符号,那么使用当前的文化是没有意义的。最好使用不变的文化:

Convert.ToDecimal("0.000001", CultureInfo.InvariantCulture);

换一种说法:

C# 知道using指令,因此您不必完全限定所有类型。

无需编写System.Globalization.CultureInfo,您只需将其放在using System.Globalization;C# 文件的顶部并CultureInfo在代码中使用即可。
这使您的代码更具可读性。

于 2012-10-05T07:42:59.313 回答
0

在法国文化中,小数不使用点,而是逗号。(例如:0,000001)

如果要在法语文化中解析 0.00001,请指定CultureInfo.InvariantCulture以处理点而不是逗号

于 2012-10-05T07:44:02.603 回答
0

它与文化如何指定十进制数有关。在英语(和 .net 的不变文化)中,小数分隔符是点字符“。”,但在法语(和大多数欧洲文化)中,逗号“,”是小数分隔符。

using System.Globalization;
...

decimal d = Convert.ToDecimal("0.000001",CultureInfo.InvariantCulture);
//outputs 0.000001
Console.WriteLine(d); 

CultureInfo french = new CultureInfo("fr");
d = Convert.ToDecimal("0,000001",french);
//outputs 0.000001
Console.WriteLine(d); 

d = Convert.ToDecimal("0.000001",french);
//Throws an "Input string was not in a correct format" exception
//because a . is not a valid character in a decimal, according to french culture

如果您通过 UI 从用户那里获取值,则需要格外小心他输入数据的文化,因为很容易将小数点误解为千位分隔符,而不是十 (10.00) 项来保存千。

于 2012-10-05T07:56:15.733 回答