c# - 如何强制 float 和 int 具有小数点或尾随零

标签 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 位小数?我不关心它是如何四舍五入的,也不关心它是否被截断。

最佳答案

使用字符串格式。您需要的所有信息都在以下 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));

关于c# - 如何强制 float 和 int 具有小数点或尾随零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32485064/

相关文章:

c# - GridView 中 DropDownList 中的 Eval()

c# - 为集合中的每个项目设置属性

c# - 使用 SQL (SDF) 数据库中的项填充 WPF 列表框

c# - 在 Controller 中访问表单值,我试图将整个网格发布回发布方法 ASP.net MVC

C#-获取年龄的用户输入..但收到错误?

c# - 如何在 Blazor 中以两种方式绑定(bind)级联值?

c# - 在 Telerik Radgrid 中,如何根据组标题的数量对结果进行分页?

c# - .NET DB2 OLEDB 先决条件

c# - 如何将此 VB 代码转换为 C#?

c# - 使用 NAudio 更改 wav 文件(到 16KHz 和 8bit)