我正在尝试确定c#ulong数字中的位数,我试图使用一些数学逻辑而不是使用ToString()。长度。我没有对这两种方法进行基准测试,但已经看到有关使用System.Math.Floor(System.Math.Log10(number))+ 1来确定位数的其他帖子。 似乎工作正常,直到我从999999999999997过渡到999999999999998,此时,我开始得到一个不正确的计数。
有没有人遇到过这个问题?
我看过类似的帖子有Java重点@ 为什么log(1000)/ log(10)与log10(1000)不同? 还有一个帖子@ 如何获取int数字的单独数字? 这表明我如何使用%运算符实现相同的功能,但代码更多
这是我用来模拟这个的代码
Action<ulong> displayInfo = number =>
Console.WriteLine("{0,-20} {1,-20} {2,-20} {3,-20} {4,-20}",
number,
number.ToString().Length,
System.Math.Log10(number),
System.Math.Floor(System.Math.Log10(number)),
System.Math.Floor(System.Math.Log10(number)) + 1);
Array.ForEach(new ulong[] {
9U,
99U,
999U,
9999U,
99999U,
999999U,
9999999U,
99999999U,
999999999U,
9999999999U,
99999999999U,
999999999999U,
9999999999999U,
99999999999999U,
999999999999999U,
9999999999999999U,
99999999999999999U,
999999999999999999U,
9999999999999999999U}, displayInfo);
Array.ForEach(new ulong[] {
1U,
19U,
199U,
1999U,
19999U,
199999U,
1999999U,
19999999U,
199999999U,
1999999999U,
19999999999U,
199999999999U,
1999999999999U,
19999999999999U,
199999999999999U,
1999999999999999U,
19999999999999999U,
199999999999999999U,
1999999999999999999U
}, displayInfo);
提前致谢
拍