在不转换为字符串的情况下获取整数中的数字计数

get digits count in an integer without converting to string

是否可以计算整数中的数字位数?例如:232354是6位,456是3位。

例如,我通常会在 C# 中执行以下操作:

var count =  myInteger.ToString().Length;

但是因为我想在 HLSL(Unity 着色器)中使用它,所以使用字符串是不可能的(或?)。任何提示将不胜感激。

您可以使用以下内容:

int count = (int)Math.floor(Math.log10(myInteger) + 1);

PS : 它不适用于负数。

另一个通用但细长的解决方案:

  int count = 0;
    while (yourInteger != 0) {
        yourInteger = yourInteger / 10;
        ++count;
    }
  return count;

获取以 10 为底的整数的位数的一种方法是使用对数。 Log10 将为您提供 10 的底数(例如,可以乘以 10 的次数仍然低于此数字)因此您想要加 1 以获得位数。对数可以 return 小数余数,所以你想先取其底数以获得适当的整数值。

var count = Mathf.FloorToInt(Mathf.Log10(myInteger)) + 1;