我正在尝试通过 RS232 与机器连接,并且机器要求所有输入都有小数点分隔符,否则它会采用小数点位置。例如。如果我发送25
它将解释为0.025
, but 25.000
or 25.
将被正确接收为25.000
I tried Math.Round https://msdn.microsoft.com/en-us/library/System.Math.Round(v=VS.110).aspx但对于整数值,它不包括尾随零。
所以,如果我有
float a = 90;
float b = cos(24);
comPort.WriteLine("G01 A" + a + " B" + b);
我需要添加什么才能强制保留小数点后 3 位?我不关心它是如何舍入的,也不关心它是否被截断。
使用字符串格式。您需要的所有信息都位于以下 MSDN 页面上:
-
标准数字格式字符串 https://msdn.microsoft.com/en-us/library/dwhawy9k.aspx对于最常见的格式
-
自定义数字格式字符串 https://msdn.microsoft.com/en-us/library/0c899ak8.aspx如果您需要其他东西
float a = 90;
float b = cos(24);
comPort.WriteLine("G01 A{0:F3} B{1:F3}", a, b);
F3
表示小数点分隔符后具有 3 位精度的定点。
这有效,如果comPort
是像一个TextWriter
,因为这个类有一个WriteLine超载 https://msdn.microsoft.com/en-us/library/60scc1f1.aspx它支持格式化。如果您正在使用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));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)