【问题标题】:How to convert string with decimal dot into double with decimal comma?如何将带小数点的字符串转换为带小数点逗号的双精度?
【发布时间】: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#


【解决方案1】:

double 不包含有关如何(直观地)将小数部分与整数部分分开的任何信息。如果您打印一个没有任何特定文化格式信息的双精度,您将获得标准的 . 作为分隔符。

【讨论】:

  • 感谢您的回答。我确实使用 NumberFormatInfo 作为文化格式信息。这是否意味着当我想在网站上显示逗号时,我别无选择,只能使用字符串而不是双精度数?
  • @User2018:在网站上显示双精度的代码应该负责将正确的文化应用于(可能是隐式的)字符串转换。如果您向我们展示相关代码,我们可以在这里为您提供帮助。
  • @Heinzi 我创建了一个 C# 对象。将其序列化(或反序列化?)为 JSON 对象,然后将其呈现给网站。我开始想也许我需要在 JS 上使用替换来转换小数
  • @User2018 这是一个完全不同的问题 - JSON 中的数字具有 特定 格式。你不能有一个没有小数点的数字。如果您想以某种方式显示它们,那么您的 Javascript 代码 必须更改并考虑本地化
  • @User2018:在 JavaScript 中,您可以使用Number.toLocaleString,另见stackoverflow.com/q/5882994/87698
猜你喜欢
  • 1970-01-01
  • 2010-12-07
  • 2015-11-21
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
  • 2015-04-03
  • 2022-06-15
  • 1970-01-01
相关资源
最近更新 更多