我正在尝试通过RS232与机器连接,并且机器要求所有输入都有一个小数点分隔符,否则它将采用小数位。例如。如果我发送25
,则会将其解释为0.025
,但25.000
或25.
将被正确接收为25.000
我尝试Math.Round
但是对于整数值,它不包括尾随零。
所以,如果我有
float a = 90;
float b = cos(24);
comPort.WriteLine("G01 A" + a + " B" + b);
我需要添加什么才能强制增加3位小数?我并不关心它是如何被舍入的,也不会被截断。
答案 0 :(得分:10)
使用字符串格式。您需要的所有信息都在以下MSDN页面上:
float a = 90;
float b = cos(24);
comPort.WriteLine("G01 A{0:F3} B{1:F3}", a, b);
F3
表示小数分隔符后3位精度的固定点。
如果comPort
类似于TextWriter
,则此方法有效,因为此类的WriteLine
overload支持格式化。如果您直接使用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));
答案 1 :(得分:4)
在a和b上使用ToString()方法,如下所示:
comPort.WriteLine("G01 A" + a.ToString("F3") + " B" + b.ToString("F3"));
应该这样做。
答案 2 :(得分:1)
使用String.Format
而不是使用串联comPort.WriteLine(String.Format("G01 A{0:F3} B{1:F3}", a, b));