Skip to content

DbcGenerator produces invalid numeric syntax under comma-decimal cultures #8

Description

@PengjiangXiao

问题描述

DbcGenerator 使用普通字符串插值输出 DBC 数值,因此结果受到当前系统 CultureInfo.CurrentCulture 影响。

de-DEfr-FR 等使用逗号作为小数分隔符的区域设置下,数值 0.5 可能被输出为 0,5

DBC 信号定义本身也使用逗号分隔 Factor 和 Offset:

(0.5,-1.25)

如果小数点被转换为逗号,就可能生成无法解析或语义错误的 DBC。

确认环境:

  • 分支:master
  • 提交:a736f3b850bb454268093b8c1a409627649393e8
  • 文件:EasyDbc/Generators/DbcGenerator.cs

复现步骤

  1. 将当前线程区域设置改成 de-DE
CultureInfo.CurrentCulture = new CultureInfo("de-DE");
  1. 创建 Factor 为 0.5、Offset 为 -1.25 的信号。
  2. 使用 DbcGenerator 输出 DBC。
  3. 检查生成的信号定义。

实际结果

小数可能使用逗号分隔,例如:

(0,5,-1,25)

该文本无法再明确区分两个数值字段。

FLOAT 属性默认值、实际值、最小值和最大值也存在相同风险。

期望结果

DBC 数字应始终使用点号作为小数分隔符,与操作系统区域设置无关:

(0.5,-1.25)

建议修复方式

所有输出到 DBC 语法中的数值都应使用:

CultureInfo.InvariantCulture

建议覆盖:

  • Signal Factor
  • Signal Offset
  • Signal Minimum
  • Signal Maximum
  • FLOAT 属性范围
  • FLOAT 属性默认值
  • FLOAT 属性实际值

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions