C# : .NET

[".0s4*0|collections;datetime-format;collections",["F@eA","FIBEECECLG","OBOBOSTUUUUTTUUUUYFGDHDHDFOCCWBCSTTUUUUTTUUUU","wrkr.",".NET","Array","Dictionary","List","String","2D","Async","Console","DataTable","Dates","DateTime","Enum","File","For","Foreach","Format","IEnumerable","If","IndexOf","Lambda","LINQ","Optimization","Parse","Path","Process","Property","Random","Regex","Replace","Sort","Split","Static","Substring","Switch","Tuple","While","Integer Digit Count."," This method finds the number of digits in an integer. It avoids the ToString method. It is possible to determine the number of digits by using an implicit cast and several if-conditions. This approach avoids all allocations. ","Int ","int","Example."," We demonstrate two methods that both return the same result when passed integer arguments. The first method, GetIntegerDigitCountString, converts the integer to a string and then accesses the Length property on the string. ","String Length ","string-length","The second method,"," GetIntegerDigitCount, uses mathematical logic and conditionals to determine how many digits and characters the integer would have if it were converted to a string. Both methods count the sign as a digit (character). ","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","6227126509","data-ad-format","auto","br","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","6227126509","data-ad-format","auto","Based on:"," .NET 4.6\n\n","C# program that counts number of digits in integers","\n\nusing System;\n\nclass Program\n{\n static void Main()\n {","\n // Write number of digits in the integers using two methods.\n ","Console.WriteLine(GetIntegerDigitCountString(int.MinValue));\n Console.WriteLine(GetIntegerDigitCount(int.MinValue));\n Console.WriteLine(GetIntegerDigitCountString(int.MaxValue));\n Console.WriteLine(GetIntegerDigitCount(int.MaxValue));\n Console.WriteLine(GetIntegerDigitCountString(0));\n Console.WriteLine(GetIntegerDigitCount(0));\n Console.WriteLine(GetIntegerDigitCountString(9999));\n Console.WriteLine(GetIntegerDigitCount(9999));\n Console.WriteLine(GetIntegerDigitCountString(-9999));\n Console.WriteLine(GetIntegerDigitCount(-9999));\n }\n\n static int ","GetIntegerDigitCountString","(int value)\n {\n return value.ToString().Length;\n }\n\n static int ","GetIntegerDigitCount","(int valueInt)\n {\n double value = valueInt;\n int sign = 0;\n if (value < 0)\n {\n value = -value;\n sign = 1;\n }\n if (value <= 9)\n {\n return sign + 1;\n }\n if (value <= 99)\n {\n return sign + 2;\n }\n if (value <= 999)\n {\n return sign + 3;\n }\n if (value <= 9999)\n {\n return sign + 4;\n }\n if (value <= 99999)\n {\n return sign + 5;\n }\n if (value <= 999999)\n {\n return sign + 6;\n }\n if (value <= 9999999)\n {\n return sign + 7;\n }\n if (value <= 99999999)\n {\n return sign + 8;\n }\n if (value <= 999999999)\n {\n return sign + 9;\n }\n return sign + 10;\n }\n}\n\n","Output","\n\n11\n11\n10\n10\n1\n1\n4\n4\n5\n5","Here we explain"," how the GetIntegerDigitCount method is internally implemented. First, the int parameter is widened to a double value. This allows us to convert it to a positive value without losing information. ","And: ","We test it against zero, and if it is negative, we set the sign variable to 1 and make it positive.","Then: ","We test against the constants (9, 99, 999) to determine its positive length. We return the sum of characters in the string.","A summary."," We computed the number of digits in an integer using mathematical logic only, and also by using the ToString method. The ToString version will force an allocation on the managed heap and is likely much slower. ","ToString ","tostring","And: ","Performance depends on the string implementation and garbage collection specifics.","br","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","3679700504","data-ad-format","link","br","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","6227126509","data-ad-format","auto"],"url(data:image/png;base64,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)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAACCAgMAAADasxWRAAAADFBMVEX/6Nn///+VlZX29va5ksB5AAAASElEQVR4AWPACZj/f0DmjkqOSjKtQgcLyJccZiEE9SOmP8mXHEaBMBoIo4EwGggryJccvvVKKAogTnJUclRyVHLklgmjkqOSAALWyrsxEHLDAAAAAElFTkSuQmCC)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAABpCAMAAADflzs9AAAAVFBMVEX////2+fju9PHy9/X0+Pbx9vTo8Ozj7ejZ5uDP4tmwz8Dd6uTL3dTV49x8sJe208Wuzr/P39drpoq61chopIecw7CSvahgn4F1rJFjoYOAsppyqo9IgRfDAAACtElEQVR4Xu3XyVKEMBSF4cxh7Hn2/d9TrtE+VUhTaJrcLPIvLGXjJyegiq/0ZfPIoIBRt2sOBYzLCePzwZiA+bgwtvnBaNES5iylYUlrLbffGGnlF+YiteJKNyPMWUjNkh0wu18YprTNCCM1PwZpZfLBmJwwumAKpmAKpmCSVzAFUzAF47oQvlgCcEMrYtxfMBboVTBtTpguG4wfDCoXjCXQNMb3g6/3Iwo1Bvlq3/Wti8aIfdfVwFCghtw8BnP3JhbjCQEMLMjNYhSAdSyGFO43Zk+KvuoJs39iTLhQDT0xNSm86wM7DiPCww0MoA6fvD7A6ueOtKSPxVSkGGPa502vCTuD8T9YQ8xYDDHUGENr+Oc362cw9LNYQRHGRmJoJz/GYBwoxxgcLmepeEwYov4/pkPxmDCEeRNGxGIsTTJ/ZtJhaPbqH08T2AqAaAzt5Be+ZwxhzOjR7u3bMEG16A2MWSqBlx6qojHYff53E2YhJy68GVMBA820RVjAoXkTBqz5v2eQaseXXRU2da7831QwBbNmUjapMPK4na1pds0lFcadrgtKhTlkhPH5YIxoCXM/ve5wSIXRAbNTbjLvvFKXK3VOgJEVYRqpJ7PWmPPTsjJG2m+MsFMpZRUsqTBbIScyRmhYEmJeBEsSTAvMjCUl5jhv4cfAwo+BhR8DSzKMUMBMWh4yIeblTE2wWJEQo19gtsGihGC+M7A4wYyBZaPA4JsJG/HfGVj4McfReeF66cGygYURc8RG3BicF34Mzgs/BueFGwOLEvwYbMSPgYUbsx2dF14MLPyYY4eNuDH3xwGW5BhkFDmw0SLMppls20S0o84nWJZhEgQLP+bmxTLMx/qWUy8WYjbX+7pdb5VYlFau7uq12g8NH71YilHGGLlKhpJieUZbtWbWavGH5MqJuEqfDRAN8iKPPjsAAAAASUVORK5CYII=)"]

["url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAB4BAMAAADS7QcCAAAAGFBMVEX////0qHKhmbLDvs74yKT4xaH4yqr2tYUVUWgbAAAAfUlEQVR42u3XsQmAMBgF4V9xAAOCfVxAdAEdQtwg1il0fsHS8IpIsLob4OvPnKy1V7WXWb+J9pQZZpG3zkRNyowmmmBgYGBgYGBgYGBgYGA+Mn0QHTl3V+o1iYieKifLYq4gilnMYqIVBgYGBgYGBgYGBgYG5gfm3ESx0GvePshxrr29cIIAAAAASUVORK5CYII=)","url(data:image/jpeg;base64,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)"]