1

我遇到了一种情况,我认为这超出了使用自定义格式字符串所能做的范围。

但是我写的代码太恶心了,我想我还是会问的。

我需要将小数显示为 6 位或 7 位字符串,如下所示:

number = 12345.67M
(optional)
tenthousands thousands hundreds tens ones tenths hundredths
     1          2         3      4    5     6        7

这是我为实现此目的而编写的代码:

public static string ConvertDecimalToString(decimal easting, int length)
{
    var formatString = "{0:0000.00}";
    var numberAsString = string.Format(formatString, easting);
    var removePeriod = numberAsString.Replace(".", "");

    if (removePeriod.Length > length)
    {
        return removePeriod.Substring(removePeriod.Length - length, length);
    }
    else
    {
        return removePeriod.PadLeft(length, '0');
    }
}

预期输入和输出:

Input           Output(6)    Output(7)
912345.67M      234567       1234567
12345.67M       234567       1234567
1234.56M        123456       0123456
1234.5M         123450       0123450
1234M           123400       0123400
234M            023400       0023400
4

2 回答 2

1

如果你想要一个小数12345.67显示为1234567(只是省略小数点)使用这个技巧:

decimal number = 12345.67M;
string s = string.Format("{0:0000000}", number * 100.0);

或者

string s = string.Format("{0:F0}", number * 100.0); // zero decimal places

士气:不要摆弄格式化产生的字符串,而是修改输入值,让格式化完成它的工作。

于 2015-07-09T05:50:38.513 回答
0

如果我理解正确,您想将您的号码与数字分开

str=number.ToSting() 将给出一个字符串,您可以迭代并创建您的号码

str.split('.') 会给你号码的两边然后你将能够动态地构建你的 stribg 号码而不强制格式

于 2015-07-09T05:50:16.273 回答