C# 如果十进制数大于ToString格式描述符,如何强制执行异常?

C# 如果十进制数大于ToString格式描述符,如何强制执行异常?,c#,format,decimal,C#,Format,Decimal,我必须使用传递给代码的各种格式描述符格式化小数,这些描述符指定小数点左侧有效数字的变化。每个格式描述符的ToString输出的左侧数字不能太多,否则我将返回一个错误(格式溢出) 是否存在一些ToString十进制格式描述符(我找不到任何描述符)或其他十进制到字符串转换机制,如果十进制大于为十进制左侧分配的字符串空间,我可以在这些机制中获得异常?我想像下面的代码扔,而不是工作的东西。我希望有比在格式描述符中计算字符、自己计算最大十进制数并在尝试转换之前进行比较更优雅/内置的东西。谢谢 st

我必须使用传递给代码的各种格式描述符格式化小数,这些描述符指定小数点左侧有效数字的变化。每个格式描述符的ToString输出的左侧数字不能太多,否则我将返回一个错误(格式溢出)

是否存在一些ToString十进制格式描述符(我找不到任何描述符)或其他十进制到字符串转换机制,如果十进制大于为十进制左侧分配的字符串空间,我可以在这些机制中获得异常?我想像下面的代码扔,而不是工作的东西。我希望有比在格式描述符中计算字符、自己计算最大十进制数并在尝试转换之前进行比较更优雅/内置的东西。谢谢

    static void Main(string[] args)
    {
        string lFormat = null;
        decimal lValue = 123456.5678m;

        // For example, I would like something like this to throw because the number would not fit into 3 significant left side digits...
        lFormat = "000.00";
        Console.WriteLine("Format '{0}' value '{1}'.", lFormat, lValue.ToString(lFormat));

        Console.WriteLine("Hit Enter to exit...");
        Console.ReadLine();
    }

我不知道有任何方法具有这种行为,但是,您可以非常轻松地实现自己的方法。身体看起来像这样

int significantDigits = 4;


if (MyFloat.ToString().Split('.')[1].Length > significantDigits)
    throw new Exception("That float was too high of percision.");

您可能希望细化此代码(例如,如果输入和int而不是float,则会导致IndexOutOfRangeException崩溃),但基本思想是转换为字符串,在
上拆分,检查索引1的长度,如果超过我的限制,则抛出异常。

我决定这样做:

//检查小数点是否不会溢出给定格式

decimal lMaxValue=decimal.Parse(新字符串('9',左位)+“+”新字符串('9',右位))

如果(pValue>lMaxValue)
抛出新的OverflowException()

您可能想得太多了:如果(左值>999.999m)抛出…格式以外的内容不总是#########################并且。我想我可以做类似的事情,但我希望它可以成为转换过程本身的一部分,使用格式描述符掩码,而不是在事实发生后比较有效的左侧数字。但是,如果没有更好的内置解决方案,我们将继续使用它。@Dave是的,如果您可以自己引用小数部分,那将是很好的,但我不认为它真的是带有浮点数的选项。我的理想选择是有一个FormatProvider掩码,其中包含MyDecimalVaue.ToString(“999.99”)如果十进制值为1000或甚至999.999,则会溢出,因此无法放入掩码。