如何强制float和int有一个小数点或尾随零

时间:2015-09-09 16:41:05

标签: c#

我正在尝试通过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位小数?我并不关心它是如何被舍入的,也不会被截断。

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));