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 属性实际值

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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