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

C# 如何强制浮点和int具有小数点或尾随零,c#,C#,我试图通过RS232与机器接口,机器要求所有输入都有一个十进制分隔符,否则它将采用十进制位置。例如,如果我发送25,它将解释为0.025,但25.000或25。将被正确接收为25.000 我试过了,但对于整数值,它不包括尾随的零 所以,如果我有 float a = 90; float b = cos(24); comPort.WriteLine("G01 A" + a + " B" + b); 我需要添加什么,以便强制3位小数?我不关心它是如何舍入的,也不关心它是否被截断。对a和b使用ToSt

我试图通过RS232与机器接口,机器要求所有输入都有一个十进制分隔符,否则它将采用十进制位置。例如,如果我发送
25
,它将解释为
0.025
,但
25.000
25。
将被正确接收为
25.000

我试过了,但对于整数值,它不包括尾随的零

所以,如果我有

float a = 90;
float b = cos(24);
comPort.WriteLine("G01 A" + a + " B" + b);
我需要添加什么,以便强制3位小数?我不关心它是如何舍入的,也不关心它是否被截断。

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

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

这样就可以了。

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

  • 对于最常见的格式
  • 如果你需要别的东西
F3
表示小数点分隔符后精度为3位的定点

如果
comPort
类似于
TextWriter
,则此方法有效,因为此类具有支持格式化的。如果您直接使用
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(string.Format("G01 A{0:F3} B{1:F3}", a, b));

使用String.Format代替串联

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

谢谢你的参考和解释!还想补充一点,在0.000中包括###将允许可选的额外小数位数。以防其他人以后需要此信息。但是,我的计算机支持的位置不超过3个。是否需要String.Format部分?我无法确定comPort.WriteLine()上的签名是什么:)如果是SerialPort,则需要String.Format。许多TextWriter实现可以接受格式参数,然后接受参数列表,因此如果此comPort对象支持它,一旦开始使用String.Format,您就不需要使用String.Format进行换行。您将发现代码分析的另一个好处,即检查您是否实际指定了正确数量的参数以匹配您的Format参数,这样的小故障在运行时之前不会被注意到(如果出现错误):
comPort.WriteLine(string.Format("G01 A{0:F3} B{1:F3}", a, b));
comPort.WriteLine(String.Format("G01 A{0:F3} B{1:F3}", a, b));