【问题标题】:Double to String Format text formatDouble to String Format 文本格式
【发布时间】:2013-06-01 09:28:58
【问题描述】:

我有以下代码行

double formId=2013519115027601;
txtEditFormID.Text = formid.ToString();  

它给了我输出

2.0135191150276E+15

如果我写

txtEditFormID.Text = formId.ToString("0.0", CultureInfo.InvariantCulture);

它给了我

 2013519115027600.0

但我想要标签文本

2013519115027601

怎么做?

【问题讨论】:

  • 你不能用long代替double吗?
  • txtEditFormId.Text = ((long)formId).ToString();
  • @newStackExchangeInstance 这工作正常
  • @IlyaIvanov 往返说明符怎么样? formID.ToString("R") 好像完全正确

标签: c# double cultureinfo


【解决方案1】:

我没有足够的信息来说明您的 formId 变量的使用情况。

如上所示,当没有小数可以处理时,使用双精度数据类型似乎是错误的。因此,将变量重新定义为 long 数据类型将很容易,并且转换将是相同的。

long formId=2013519115027601;
txtEditFormID.Text = formid.ToString();  

更不用说使用整数而不是浮点数为您的代码带来的额外好处了。
但是,如果你想保持当前的数据类型,那么

 txtEditFormID.Text = formId.ToString("R");

The Round Trip Format Specifier

当使用此说明符格式化 Single 或 Double 值时,它是 首先使用通用格式进行测试,精度为 15 位 一个 Double 和 7 位精度的 Single。如果值为 成功解析回相同的数值,它被格式化 使用通用格式说明符。如果值不成功 解析回相同的数值,使用 17 位格式化 Double 的精度和 Single 的 9 位精度。

【讨论】:

    【解决方案2】:

    您的第一个选择是使用数据类型为 longdecimal 。如果您想继续使用 double,您可以做的其他事情是:

            double formId = 2013519115027601;
            string text = formId.ToString();
            txtEditFormID.Text = text.Replace(".",string.Empty);  
    

    这将删除所有 '.' 字符

    【讨论】:

      【解决方案3】:

      有时我希望以 double 形式处理计算,但我希望结果显示为 int 或什至舍入的数量,因此问题并不奇怪(假设给定样本被简化以提出问题)。

      我打算发布舍入的示例代码,但只使用内置方法 Math.Round() 更有意义。如上所述,您可以转换为 long,但如果需要(通常是,恕我直言),您不会进行舍入。

      【讨论】:

        【解决方案4】:

        txtEditFormId.Text = ((long)formId).ToString();

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-14
          • 2014-05-17
          • 2011-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-02
          相关资源
          最近更新 更多