c#如何String.Format十进制无限小数位?

jur*_*rev 8 c#

我需要将十进制数转换为带有千组和无限(可变)十进制数的格式化字符串:


    1234 -> "1,234"
    1234.567 -> "1,234.567"
    1234.1234567890123456789 -> "1,234.1234567890123456789"

我尝试了String.Format("{0:#,#.#}",十进制),但它将任意数字修剪为最多1位小数.

Ree*_*sey 20

您可以多次使用#(请参阅自定义数字格式字符串):

string.Format("{0:#,#.#############################}", decimalValue)
Run Code Online (Sandbox Code Playgroud)

或者,如果您只是直接格式化数字,也可以使用带有格式字符串的decimal.ToString.

但是,没有办法包含" 无限小数".如果没有支持任意精度浮点数的库(例如,使用来自Extreme Numerics的BigFloat之类的东西),最终会遇到精度问题.即使十进制类型也有其精度限制(28-29位有效数字).除此之外,你还会遇到其他问题.


xan*_*tos 7

正如我所说,十进制类型的精度为28-29位.

decimal mon = 1234.12345678901234567890123M;
var monStr = mon.ToString("#,0.##############################");
var monStr2 = String.Format("{0:#,0.##############################}", mon);
Run Code Online (Sandbox Code Playgroud)

这里有#十进制分隔符后的30x :-)

我改变了一个#,0所以0.15不写.15.