如何强制浮点数和整型数有小数点或后面的零?

本文关键字:小数点 浮点数 何强制 整型 | 更新日期: 2023-09-27 18:11:52

我试图通过RS232与机器接口,机器要求所有输入都有小数分隔符,否则它会假设小数位置。例如,如果我发送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。格式的

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