Csharp/C#教程:c#如何String.Format十进制无限小数位?分享


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

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

       1234  - >“1,234”1234.567  - >“1,234.567”1234.1234567890123456789  - >“1,234.1234567890123456789” 

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

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

string.Format("{0:#,#.#############################}", decimalValue) 

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

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

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

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

这里有小数分隔符后的30x # ?

我用0更改了一个# ,因此0.15不会写为.15

这应该可以解决问题

 string DecimalToDecimalsString(decimal input_num) { decimal d_integer = Math.Truncate(input_num); // = 1234,0000... decimal d_decimals = input_num-d_integer; // = 0,5678... while (Math.Truncate(d_decimals) != d_decimals) d_decimals *= 10; //remove decimals string s_integer = String.Format("{0:#,#}", d_integer); string s_decimals = String.Format("{0:#}", d_decimals); return s_integer + "." + s_decimals; } 

用其他类型替换十进制也应该有效。

上述就是C#学习教程:c#如何String.Format十进制无限小数位?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1006470.html

(0)
上一篇 2021年12月29日
下一篇 2021年12月29日

精彩推荐