我试图格式化一个数字在一个非常具体的方式时显示它,我已经尝试搞乱与字符串格式,但无法找到一种方法,使其工作完全符合我的需要。
例如,假设我有一个值为"123459.7889"的双精度型变量,我想将其格式设置为"459.788"(000.000),但仅在控制台写入行期间()并且不舍入或更改数字的内部值。数字的完整值将不会显示,技术上应该"溢出"字符串,因为它应该只打印小数点左边的前3个数字。
以下是一些示例输入和示例输出:
格式化为"000.000"的12345.678将变为345.678
格式化为"000.000"的1000000.678将变为000.678
格式化为"000.000"的1.777888将变为001.777
格式化为"000.000"的99999.9将变为999.900
基本上,不管数字的内部大小如何,格式化输出应该始终是小数点左边的3个数字和小数点右边的3个数字,如果有空格的话,用零替换缺失的空格。
我试着查看C#文档中的示例,发现了以下内容:
double value = 123459.7889;
string result = String.Format("{0,8:00000000} {0,8:00000000.000}", value);
Console.WriteLine(result);
但是它并不像我所需要的那样工作,当运行它的时候,数字被四舍五入,所以它变成了00123459.789而不是00123459.788,例如,如果数字增长,它就不再停留在那个固定的大小。
5条答案
按热度按时间vpfxa7rd1#
试试这个:
数值= 123459.7889;结果= 345.678
数值= 1000000.678;结果= 000.678
数值= 1.777888;结果= 001.777
数值= 99999.9;结果= 999.900
数值= 152;结果= 152.000
值= -100.02;结果= 100.020
数值= 10.0005;结果= 010.000
uxh89sit2#
当值字符不够时,我们可以使用
PadLeft
和PadRight
来填充零。b09cbbtk3#
您不应该需要转换为字符串,也不应该依赖于在您运行的语言中可能是也可能不是十进制字符的字符进行拆分。您可以对数字进行所有计算,然后格式化输出,而无需分配除结果之外的任何字符串。
khbbv19g4#
工作原理:
1.使用模数(
%
)删除高位数1.使用format string将格式设置为三位小数
1.使用
PadLeft()
向左焊盘完整示例:
输出:
Fiddle
qjp7pelc5#
试试这个