在不转换为字符串的情况下获取整数中的数字计数
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;
是否可以计算整数中的数字位数?例如: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;