C# NET中的动态数字格式?

C# NET中的动态数字格式?,c#,number-formatting,C#,Number Formatting,我有个问题,找不到解决办法。我有像85.12343或100或1.123324这样的数字(十进制)。我想用一种方式格式化它,结果总是13个字符长,包括分隔符 100-->100.000000000 1.123324-->1.1233240000 我试着用toString,但失败了。我怎么能这样做 谢谢:)整数位数=13; 十进制d=100433.24142241214m; int正数=Decimal.Truncate(d).ToString().Length; 整数小数=数字-正-1//-1为圆点

我有个问题,找不到解决办法。我有像85.12343或100或1.123324这样的数字(十进制)。我想用一种方式格式化它,结果总是13个字符长,包括分隔符

100-->100.000000000
1.123324-->1.1233240000

我试着用toString,但失败了。我怎么能这样做

谢谢:)

整数位数=13;
十进制d=100433.24142241214m;
int正数=Decimal.Truncate(d).ToString().Length;
整数小数=数字-正-1//-1为圆点
if(小数<0)
小数=0;
字符串dec=d.ToString(“f”+小数);
如果需要,它不会从整个零件中删除数字,只删除分数。

我会选择,除非您可以从13个以上的数字开始,在这种情况下,您可能需要这样做(警告:我甚至没有尝试使其有效;如果必要,肯定有办法对其进行优化):

public static string to trimmedstring(此十进制值,int numDigits)
{
//首先算出小数点后有多少位在左边
//小数点的小数点。
int digitsToLeft=0;
//这应该是安全的,因为您说过所有输入都是0)
{
++数字左;
温度/=10;
}
//然后只需显示“可用”的小数位数
//取小数点和小数点左边的值
//(如果有可能出现负数,你应该
//为负值减去另一个数字,以允许使用“-”号。)
返回值.ToString(“#.”+新字符串('0',numDigits-digitsToLeft-1));
}
输入/输出示例:

Input Output --------------------------------------- 100 100.000000000 1.232487 1.23248700000 1.3290435309439872321 1.32904353094 100.320148109932888473 100.320148110 0.000383849080819849081 .000383849081 0.0 .000000000000 输入输出 --------------------------------------- 100 100.000000000 1.232487 1.23248700000 1.3290435309439872321 1.32904353094 100.320148109932888473 100.320148110 0.000383849080819849081 .000383849081 0.0 .000000000000
除了简单地填充字符串外,您还可以做一些更精细的数学运算来确定位数:

String FormatField(Int32 fieldWidth, Decimal value) {
  var integerPartDigits =
    value != Decimal.Zero ? (int) Math.Log10((Double) value) + 1 : 1;
  var fractionalPartDigits = Math.Max(0, fieldWidth - integerPartDigits - 1);
  return value.ToString("F" + fractionalPartDigits);
}
请注意,如果该值为负数或包含一个整数部分,且该整数部分的位数比字段宽度少一位,则无法获得所需的结果。但是,您可以根据您希望如何格式化和对齐这些数字来修改代码以适应这些情况。

Quick'n'dirty:

return (value.ToString("0.#") + "0000000000000").Substring(0, 13);
那怎么办

string newString;
if (original.ToString().Length >= 13)
{
    newString = original.ToString().Substring(13);
}
else
{
    newString = original.ToString().PadRight(13, '0');
}

那123456789.987654321呢?您是否希望看到
123456789.988
?正确,但在分隔符之前,它不会大于100。类似的问题,在下面的链接+1中解决,为了了解合适的格式化程序,除了“d”之外,我永远记不起任何其他格式化程序。这很好,但这在不舍入的情况下是否有效?+1-我发布了几乎相同的内容。虽然没有使用
log
,但使用
十进制似乎很奇怪。很好,但它不会对数字进行四舍五入。
return (value.ToString("0.#") + "0000000000000").Substring(0, 13);
string formatted = original.ToString("0.000000000000").Remove(13);
string newString;
if (original.ToString().Length >= 13)
{
    newString = original.ToString().Substring(13);
}
else
{
    newString = original.ToString().PadRight(13, '0');
}
int noofdecimal=3;
double value=1567.9800
value.ToString("#." + new string('0', noofdecimal));

//Result=1567.980