【问题标题】:decimal custom format string with fixed precision and no period具有固定精度且无句点的十进制自定义格式字符串
【发布时间】:2015-07-09 05:42:35
【问题描述】:

我遇到了一种情况,我认为您无法使用自定义格式字符串。

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

我需要将小数显示为 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

【问题讨论】:

  • 那么对于输入 = 12345.67M 和输入 = 1234.56M,您的预期输出是什么样的?
  • 为什么您认为自定义格式字符串不起作用?
  • “234567”背后的原因是什么(输出(6),第一个示例)。即删除(非常)有效数字?
  • 是的,删除最高和最低有效数字,因为它们不太可能在生成的字符串中引入冲突。
  • 那么这里的大局是什么?你想达到什么目的?这个长度有限的字符串有什么用?

标签: c# decimal format-string


【解决方案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

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

【讨论】:

  • 这似乎没有处理最大字符串长度,但它确实避免了以乘法为代价的字符串替换。无论如何,(我真的不想在这里好战,以防语气听起来很活泼)它并不能证明让格式字符串完成工作的意义。
  • @Coxy 在一般情况下,您有不同的小数分隔符(德国为,),格式处理正确,但不是您的字符串替换。这只是基本推理的一个例子。
【解决方案2】:

如果我理解正确,你想将你的号码分开

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 2011-01-04
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    相关资源
    最近更新 更多