c#如何将float转换为int

本文关键字:转换 int float | 更新日期: 2023-09-27 18:06:26

我需要将float转换为int(单精度,32位),如:
'float: 2(十六进制:40000000)to int: 1073741824'。知道怎么实现吗?
我在msdn帮助中寻找它,但没有结果。

c#如何将float转换为int

float f = ...;
int i = BitConverter.ToInt32(BitConverter.GetBytes(f), 0);

BitConverter。DoubleToInt64Bits,根据这个问题的公认答案

如果上述解决方案对您没有好处(由于它作用于double/Double而不是float/Single),那么请参阅David Heffernan的回答。

David谢谢,这是我长时间搜索Java方法类似物的简短回答:Float.floatToIntBits。下面是完整的代码:

static void Main()
{
    float tempVar = -27.25f;
    int intBits = BitConverter.ToInt32(BitConverter.GetBytes(tempVar), 0);
    string input = Convert.ToString(intBits, 2);
    input = input.PadLeft(32, '0');
    string sign = input.Substring(0, 1);
    string exponent = input.Substring(1, 8);
    string mantissa = input.Substring(9, 23);
    Console.WriteLine();
    Console.WriteLine("Sign = {0}", sign);
    Console.WriteLine("Exponent = {0}", exponent);
    Console.WriteLine("Mantissa = {0}", mantissa);
}

如果你的目标版本小于。net 4且BitConverter不可用,或者你想将浮点数转换为32位整型,请使用内存流:

using System;
using System.IO;
namespace Stream
{
  class Program
  {
    static void Main (string [] args)
    {
      float
        f = 1;
      int
        i;
      MemoryStream
        s = new MemoryStream ();
      BinaryWriter
        w = new BinaryWriter (s);
      w.Write (f);
      s.Position = 0;
      BinaryReader
        r = new BinaryReader (s);
      i = r.ReadInt32 ();
      s.Close ();
      Console.WriteLine ("Float " + f + " = int " + i);
    }
  }
}