我正在尝试通过 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 位小数?我不关心它是如何四舍五入的,也不关心它是否被截断。
最佳答案
使用字符串格式。您需要的所有信息都在以下 MSDN 页面上:
- Standard Numeric Format Strings对于最常见的格式
- Custom Numeric Format Strings如果你需要别的东西
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));
关于c# - 如何强制 float 和 int 具有小数点或尾随零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32485064/