【问题标题】:Decimal? to string removing trailing zero's C#十进制?字符串删除尾随零的 C#
【发布时间】:2012-12-06 12:52:21
【问题描述】:

我尝试使用来自几个类似帖子的信息进行这种转换(十进制?到字符串),但不知何故失败了(“G29”;替换(“0,00”,“”)...)那会是什么转换 91,5M 十进制的最佳方法?字符串以便我们有 91,5?

    string a;
    decimal? number = 91.5M;
    a =  number.ToString(); 

在这个例子中 a = 91.5,一切都很好。但是由于某些奇怪的原因,当我从 Oracle db 获取一堆对象并尝试将它们转换为这种特定格式而不使用尾随零时,我就是找不到这样做的方法,因为最终输出总是 91,50 91,5

【问题讨论】:

  • 好吧,让我们看看您从 Oracle 获取对象的代码。您显示的代码不是问题所在,因此在很大程度上无关紧要。
  • Oracle 中如何定义这些“对象”(具体的列类型是什么)?
  • 另外值得注意的是,您应该在访问这些对象之前检查它们是否为空......
  • coalesce(column, 0) 如果问题出在 DB 的条目上
  • string a =string.Format("{0:F1}", number);这对我有用

标签: c# oracle


【解决方案1】:
var a = number.ToString("G29");

这应该会删除输出字符串中的尾随零。这有一个潜在的缺陷,因为非常小的值将被表示为“xEx”格式。不确定这是否对您有问题。

【讨论】:

    【解决方案2】:

    如果您特别想要小数点后一位且没有前导零,您可以试试这个:

    string str = number.ToString("0.#");
    

    添加更多# 将提高精度,但结果不会包含非有效数字。 将# 替换为0,以防您必须保留尾随零。

    您还可以指定分隔符的格式,使用第二个IFormatProvider 参数:

    string str = number.ToString("0.#", fr-FR); // 5 => 5   5,123 => 5,1 (comma)
    string str = number.ToString("0.#", en-US); // 5 => 5   5,123 => 5.1 (dot)
    

    【讨论】:

    • "用 0 替换 # 以防您必须保留尾随零。"非常适合我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2016-11-24
    • 2012-06-28
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    相关资源
    最近更新 更多