没有舍入.net的十进制格式

Amy*_*y B 1 .net precision decimal

昨天我问了一个关于小数及其内部精度的一般性问题.以下是我正在尝试解决的方案的具体问题.

我在SqlServer中有一个键入的列 - 十进制(18,6).当我获取这些值时,创建的.net小数与数据库中的精度相匹配.它们看起来像这样:

1.100000
0.960000
0.939000
0.844400
0.912340
Run Code Online (Sandbox Code Playgroud)

我需要根据这些规则提供(ToString)这些值:

  • 始终显示非零.
  • 显示在第n个小数位上或之前的尾随零.
  • 未显示第n个小数位后的尾随零.

所以,当n为3时,这就是我想要的:

1.100
0.960
0.939
0.8444
0.91234
Run Code Online (Sandbox Code Playgroud)

现在,我编写了一些代码,ToString的小数 - 删除所有尾随零,然后分析字符串寻找小数点并计算小数位数,以查看需要重新添加多少尾随零. 有没有更好的方法来实现这一目标?

另外,我知道我在上面的问题中说过ToString ...但是如果我可以在我的数据访问层的路上修改小数,这样消费者总是得到具有适当精度的小数,那就更好了.是否可以在没有字符串操作的情况下对小数本身执行此操作?

Pat*_*ald 9

要输出n = 3所需的格式,您可以使用:

number.ToString("0.000###")
Run Code Online (Sandbox Code Playgroud)

使用n作为参数,您可以构建自定义字符串格式:

string format = "0." + new string('0', n) + new string('#', 6 - n);
s = number.ToString(format);
Run Code Online (Sandbox Code Playgroud)