我在C#(VS2010)中遇到类型转换问题。
我需要在我的数据库中插入一些行,但C#中的十进制数字类型如下所示:1,34.
在sql字符串中它看起来:“-------- 1,34
---------”,但我需要这个字符串看起来像:“------ - 1.34
-------”
如何将" , "
替换为" . ".
感谢。
答案 0 :(得分:18)
将命令与参数一起使用以生成db命令,您根本不会遇到此类问题,这是推荐方式。见this to have an example。您几乎不应该自己格式化sql字符串,因为您总是会遇到问题,如果您将sw移动到另一个数据库文化中会怎样?那么潜在的查询注入等等。
答案 1 :(得分:2)
将数字格式化为字符串时,只需指定备用文化。
double value = 3.14D;
string formatted = String.Format(CultureInfo.InvariantCulture, "{0:F2}", value);
答案 2 :(得分:2)
如果您的数据库中有小数,并且代码中有小数,则不需要任何转换,您就可以开始了。
但是我担心你认为这是小数
“3.14”
不是。它是一个包含十进制表示的字符串,IOW它是凡人的数字的可视化。
如果您需要转换,则表示您将字符串推送到数字,或将数字推送到字符串。第二个意味着你有一个破碎的设计,第一个你从外部源解析一些凌乱的输入 - 在这种情况下我的偏好是创建一个Culture对象,然后根据凌乱的源设置其功能,例如:
culture.NumberFormat.NumberDecimalSeparator = ".";
然后在转换数据时使用此对象。
答案 3 :(得分:0)
这不依赖于C#,而是取决于您使用的默认文化。 您需要使用您选择的文化格式化小数,请参阅this获取帮助
答案 4 :(得分:0)
您可以为您使用的任何CultureInfo设置NumberFormatInfo.NumberDecimalSeparator
:
// Gets a NumberFormatInfo associated with the en-US culture.
NumberFormatInfo nfi = new CultureInfo( "en-US", false ).NumberFormat;
// Displays a value with the default separator (".").
Int64 myInt = 123456789;
Console.WriteLine( myInt.ToString( "N", nfi ) );
// Displays the same value with a blank as the separator.
nfi.NumberDecimalSeparator = " ";
Console.WriteLine( myInt.ToString( "N", nfi ) );
这是msdn
的一个例子答案 5 :(得分:0)
见上一个答案。
Stack Overflow Globalised Number Formatting
但是,您不应该只是为了在数据库中获取数字而这样做。 如果您使用参数化查询
在数据库中,数字只是一个小数。如果我在英国写一个应用程序,当它被转换成一个字符串进行显示时,我看到9,999.999你写了一个你看到9.999,999。
我正在使用英国文化,你会使用你的 那么看看为什么你需要混合文化,看看你是否可以消除这种需求,非常罕见你实际上需要这种东西,甚至更少在.Net中,因为它被设计为摆脱以前的窗口化身的所有问题引起的。
答案 6 :(得分:-6)
如果您只想将数据插入数据库,请将字符串插入“。” (替换( ' ''。'))