0

我必须使用传递给我的代码的各种格式描述符来格式化小数,这些格式描述符指定了小数点左侧的不同有效位数。每个格式描述符的 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();
    }
4

2 回答 2

2

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

int significantDigits = 4;


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

您可能需要改进此代码(例如,如果输入和 int 而不是 float,它将因 IndexOutOfRangeException 而崩溃)但基本思想是转换为字符串,拆分.,检查索引 1 的长度,如果它超过了我的极限。

于 2013-08-12T23:48:47.577 回答
0

我决定这样做:

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

十进制 lMaxValue = decimal.Parse(new string('9', LeftPlaces) + "." + new string('9', RightPlaces));

if (pValue > lMaxValue) throw new OverflowException();

于 2013-08-14T16:58:48.733 回答