首页 > 解决方案 > C# 用千位分隔符格式化数字,但保持小数位数不变

问题描述

我想为double数字添加千位分隔符,但希望保持小数位不变,即不想要任何舍入。

#,#正在解决我添加千位分隔符的问题,但如何保留小数位?#,#之后剥离部分.

我不能使用任何文化或类似的东西&我正在调用其函数的开发人员只给了我一种通过作为参数传递来更改格式的方法strFormat

我确实检查了其他帖子甚至文档,但不知何故无法弄清楚这一点。

string strFormat = "#,#";
string str = double.parse("912123456.1123465789").ToString(strFormat);
 //Expected here 912,123,456.1123465789 
//Actual Output 912,123,456

//912123456.123 should give 912,123,456.123
//912123456.1 should give 912,123,456.1
//912123456.1123465789 should give 912,123,456.1123465789
//912123456 should give 912,123,456

标签: c#number-formatting

解决方案


好吧,在查看Microsoft上的文档之后,似乎没有特定的方法可以允许数字中的浮点位置 - 格式字符串中的所有字符都是字符占位符。

我建议您要么使用非常讨厌的预定数量的#s 来设置小数位的宽度,要么使用稍微少(或可能更多,取决于您的前景)的讨厌的选项将所有数字读入数组,确定最长的小数位置,然后使用结果构建#s 的格式。

归根结底,这是一个单一的格式字符串,您可以将其放置到位、测试并确保其正常工作,然后在您找到更好的替代方案时再回来修复。

此外,这是您可以将字符串放入配置设置并在需要时进行更改的事情之一 - 更加灵活。

老实说,在性能和编写程序的宏伟计划中,这是一件非常值得担心的事情。

从技术上讲,Udi Y 得到了我的投票!


推荐阅读