【发布时间】:2018-11-07 20:34:02
【问题描述】:
我正在为一位德国客户开发一个网站。在德国,他们使用逗号作为小数分隔符。
我使用 WebMethod 从 SQL 中获取值,然后构建一个 JSON 对象以在网站上显示数据。使用 C# SqlCommand,我从 SQL 获取值作为字符串。我想将此值保存到双变量中。
这是显示我想要做的代码示例:
NumberFormatInfo nfi = new CultureInfo( "de-DE", false ).NumberFormat;
nfi.NumberDecimalSeparator = ","; // Displays the value with a comma as the separator.
string value ="15.95"; //value from SQL
string valueInString = "";
double valueInDouble = 0;
valueInString = Convert.ToDouble(value.ToString()).ToString( "N", nfi );
valueInDouble = Convert.ToDouble(value.ToString()).ToString( "N", nfi ); //Error
valueInDouble = Convert.ToDouble(valueInString,nfi);
Console.WriteLine( valueInString ); // returns 15,95. But it is a string
Console.WriteLine( valueInDouble ); // returns 15.95. the comma is reverted back to dot
我需要将数据保存为双精度。我该如何解决这个问题?
【问题讨论】:
-
小数没有格式,无论是在 .NET 还是 SQL 中。格式仅在转换为字符串或从字符串解析时适用。
-
顺便说一句
valueInDouble = Convert.ToDouble(value.ToString()).ToString( "N", nfi );是一个编译错误。该代码试图将 string 分配给 double 变量 -
@PanagiotisKanavos 感谢您的信息。这是否意味着如果我想用逗号显示十进制,我必须使用字符串?关于您的第二条评论:是的。因此命令末尾的 //error 注释 :)。这就是我最初想要实现的目标
-
我怀疑 真正的 问题是关于 .NET 应用程序中的本地化和国际化。这已经包含在文档和教程中。 ASP.NET 可以选择最终用户的语言首选项,设置请求线程的文化,UI 文化和线程文化都可以在
web.config或页面本身中配置。这也可以是用于配置请求线程文化的用户偏好 -
而不是打开另一个问题搜索重复项。它们有很多,例如this one。您可以使用 Number.toLocaleString() 在较新的浏览器中格式化数字,或在旧浏览器中使用第三方库/polyfills
标签: c#