C#将浮点向上分为单分量整数

C#将浮点向上分为单分量整数,c#,floating-point,int,C#,Floating Point,Int,我正在Unity中模拟一个数字显示,我需要知道如何将一个浮点数分解为一系列单独的整数 比如说 如果我的浮动是32.548 我需要五个单独的整数3,2,5,4,8。我还需要一个额外的整数变量,即小数点后的位数。在本例中为3 将5个整数放在一个数组中会很有用,如myIntegerArray[0]=3 myIntegerArray[1]=2 等等但这并不重要,重要的部分是将浮点值分解为单个整数的代码。 一旦有了这些,我就可以用它们来控制在一系列不同对象上显示哪些材质。一种解决方案是将浮点值转换为字符串

我正在Unity中模拟一个数字显示,我需要知道如何将一个浮点数分解为一系列单独的整数

比如说

如果我的浮动是32.548

我需要五个单独的整数3,2,5,4,8。我还需要一个额外的整数变量,即小数点后的位数。在本例中为3

将5个整数放在一个数组中会很有用,如myIntegerArray[0]=3 myIntegerArray[1]=2 等等但这并不重要,重要的部分是将浮点值分解为单个整数的代码。
一旦有了这些,我就可以用它们来控制在一系列不同对象上显示哪些材质。

一种解决方案是将浮点值转换为字符串,删除点,然后逐个字符地处理它

一旦删除点和负号(如果有),字符串的长度也会给出数字量

例如:

float value = 32.548;
string temp = value.ToString("0.00000");
temp = temp.Replace(".", "").Replace("-", "");
int numDigits = temp.Length;
int myIntegerArray[numDigits];
for (int i = 0; i < numDigits; i++)
{
   myIntegerArray[i] = Int32.Parse(temp[i]);
}
float值=32.548;
字符串温度=值ToString(“0.00000”);
温度=温度替换(“.”,“”)。替换(“-”,“”);
int numDigits=温度长度;
int myIntegerArray[numDigits];
对于(int i=0;i
一种方法是将浮点数转换为字符串,然后处理字符:

Double d = 32.548;
String s = Convert.ToString(d);
IEnumerable<Int32> ints =
  s
  .Where(c => Char.IsDigit(c))
  .Select(c => Convert.ToInt32(c.ToString()));

Int32 indexOfDecimal = s.IndexOf('.');
Int32 decimalPlaces = (indexOfDecimal == -1) ? 0 : (s.Length - indexOfDecimal) - 1;
Double d=32.548;
字符串s=Convert.ToString(d);
IEnumerable整数=
s
.其中(c=>Char.IsDigit(c))
.Select(c=>Convert.ToInt32(c.ToString());
Int32 indexOfDecimal=s.IndexOf('.');
Int32小数位数=(indexOfDecimal==-1)?0:(s.Length-indexOfDecimal)-1;

可能会使用regex而不是replace,但上面是一个hello world的例子regex可能有些过头了。尝试了这段代码,但没有测试所有内容,看起来非常有希望。没有什么问题,因为我没有使用system.linq。但现在似乎没事了。非常感谢你的代码,这对我来说是最容易理解的。谢谢你的回复!每个人都建议使用类似的系统,首先转换为字符串,然后插入到数组中。我将逐一进行测试。再次感谢!我的荣幸。请记住,此解决方案不需要linq,因为您明确表示您正在Unity上开发。尽管功能非常强大,但linq可能速度较慢或与目标平台不完全兼容。如果您喜欢此解决方案,请随意投票;)谢谢你,克里斯!!我正试图准确地理解最后一句话的意思。。。尤其是结肠前的部分:(indexOfDecimal==-1)?0:这像是一个if语句吗?是的,它是一个。如果值是一个整数(例如,
Double d=32
),我会将其包括在内。该语句基本上是这样的:“如果没有小数点,则返回零,否则返回小数点右侧的字符数(-1,因此它不包括小数点本身)”。啊,这就非常清楚了,我现在明白了!!非常感谢。在本例中,==-1表示如果indexOfDecimal没有值,我猜不是空值,它的值是“无值”类型的,这很难表达xD
Double d = 32.548;
String s = Convert.ToString(d);
IEnumerable<Int32> ints =
  s
  .Where(c => Char.IsDigit(c))
  .Select(c => Convert.ToInt32(c.ToString()));

Int32 indexOfDecimal = s.IndexOf('.');
Int32 decimalPlaces = (indexOfDecimal == -1) ? 0 : (s.Length - indexOfDecimal) - 1;
var asString = 32.548.ToString();
var decimalPartLength = asString.Split('.').Last().Length;
var digitArray = asString.Where(char.IsDigit).Select(char.GetNumericValue).ToArray();