C#将float向上划分为单个组件整数

时间:2018-04-21 13:08:22

标签: c# floating-point int

我在Unity中模拟数字显示,我需要知道将浮动分解为一系列单独的整数。

例如

如果我的浮动是32.548

我需要五个单独的投注3,2,5,4,8。我还需要一个额外的整数变量,即小数点后面的位数。在这种情况下3.

将5个整数放入数组中是有用的,如myIntegerArray [0] = 3 myIntegerArray [1] = 2 等等。但这并不重要,重要的部分是将浮动划分为单个整数的代码。 有了这些,我就可以用它来控制在一系列不同的物体上显示哪些材料。

4 个答案:

答案 0 :(得分:1)

var asString = 32.548.ToString();
var decimalPartLength = asString.Split('.').Last().Length;
var digitArray = asString.Where(char.IsDigit).Select(char.GetNumericValue).ToArray();

答案 1 :(得分:0)

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

一旦删除了点和负号(如果有的话),字符串的长度也会给你数字位数。

示例:

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]);
}

答案 2 :(得分:0)

using System;
using System.Linq;

public class Program
{
    public static void Main()
    {
        var sValue = Convert.ToString(32.548);

        var normalized = sValue.Where(s => char.IsDigit(s));

        var charArray = sValue.ToArray();

        var numArray = normalized.Select(num => char.GetNumericValue(num)).ToList();

        numArray.ForEach(num => Console.WriteLine(num));
    }
}

答案 3 :(得分:0)

一种方法是将浮点数转换为字符串,然后处理字符:

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;