如何强制浮点数和int有小数点或尾随零

我试图通过RS232与机器接口,机器要求所有输入都有一个小数分隔符,否则它采用小数位。 EG如果我发送25它会将其解释为0.025 ,但25.00025.将被正确接收为25.000

我尝试过Math.Round但是对于整数值,它不包括尾随零。

所以,如果我有

 float a = 90; float b = cos(24); comPort.WriteLine("G01 A" + a + " B" + b); 

我需要添加什么才能强制增加3位小数? 我不关心它是如何舍入的,也不关心它是否被截断。

使用字符串格式。 您需要的所有信息都在以下MSDN页面上:

  • 标准数字格式字符串,适用于最常见的格式
  • 自定义数字格式字符串,如果您需要其他内容
 float a = 90; float b = cos(24); comPort.WriteLine("G01 A{0:F3} B{1:F3}", a, b); 

F3表示小数点分隔符后的3位精度的固定点。

如果comPort类似于TextWriter ,则此方法有效,因为此类具有支持格式化的WriteLine重载 。 如果你直接使用SerialPort ,你不会得到那个重载,你必须在那里显式地放置string.Format

 comPort.WriteLine(string.Format("G01 A{0:F3} B{1:F3}", a, b)); 

一些等效的方法来写同样的东西:

 comPort.WriteLine("G01 A{0:0.000} B{1:0.000}", a, b); 

或者在C#6中:

 comPort.WriteLine($"G01 A{a:F3} B{b:F3}"); 

那个编译器会将其翻译成以下内容:

 comPort.WriteLine(string.Format("G01 A{0:F3} B{1:F3}", a, b)); 

在a和b上使用ToString()方法,如下所示:

 comPort.WriteLine("G01 A" + a.ToString("F3") + " B" + b.ToString("F3")); 

应该这样做。

而不是使用串联,请使用String.Format

 comPort.WriteLine(String.Format("G01 A{0:F3} B{1:F3}", a, b));