十进制自定义格式字符串具有固定的精度和无期(decimal custom format string

2019-10-23 17:30发布

我碰到的情况,我认为是超越你可以自定义格式字符串做什么。

但我写的代码是很恶心,我想我会问反正。

我需要的是一个小数显示为无论是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

Answer 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

士气:不要从格式制作的串不甘示弱,修改输入值,而不是让格式化完成其工作。



Answer 2:

如果我理解正确的话,你要分开您的手机号码位数

海峡= number.ToSting()会给出一个字符串,你可以遍历并创建你的电话号码

str.split(“”)会给你多少两侧然后你就可以动态地建立自己的stribg号码,而不必强制格式



文章来源: decimal custom format string with fixed precision and no period