You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何适配不同区域分隔符,获取价格字段分隔符后的数字位数?

你现有代码的核心问题是硬编码逗号作为唯一小数分隔符,不同国家/区域的小数分隔符可能是点、逗号等,还有部分区域会用逗号做千位分隔符、点做小数分隔符,会直接导致原有逻辑判断错误。

最优解决方案如下:

  • 优先使用系统自带的区域感知数值解析能力,不要手动检索分隔符
    你当前使用的是Dynamics 365 FO的X++语法,可以直接调用.NET的全球化类获取对应区域的小数分隔符,同时规避千位分隔符的干扰,修正后代码如下:
str strSalesPrice = conPeek(record,5);
System.Globalization.CultureInfo cultureInfo;
System.Globalization.NumberFormatInfo numberFormat;
System.Decimal salesPriceDecimal;
int decimalDigits;

// 取当前系统的区域配置用这句
cultureInfo = new System.Globalization.CultureInfo(System.Globalization.CultureInfo::CurrentCulture.Name);
// 如果是指定区域的价格输入,就指定对应区域代码,例如美国区:new System.Globalization.CultureInfo("en-US");

numberFormat = cultureInfo.get_NumberFormat();

// 先尝试把字符串转为decimal,过滤非法字符、规避千位分隔符干扰
if (System.Decimal::TryParse(strSalesPrice, System.Globalization.NumberStyles::Number, numberFormat, salesPriceDecimal))
{
    // 提取小数位长度
    System.String priceStr = salesPriceDecimal.ToString("0." + strRep("0", SalesParameters.DfcDigitSize + 1), numberFormat);
    int delimiterPos = strFind(priceStr, numberFormat.NumberDecimalSeparator, 1, strLen(priceStr));
    if (delimiterPos != 0)
    {
        decimalDigits = strLen(subStr(priceStr, delimiterPos + 1, strLen(priceStr)));
        if (decimalDigits > SalesParameters.DfcDigitSize)
        {
            throw error("请检查价格的小数位长度是否符合要求");
        }
    }
}
else
{
    throw error("输入的价格格式不合法,请检查");
}
  • 如果你的场景不允许转成数值类型,必须直接处理原始字符串,可以先获取目标区域的小数分隔符和千位分隔符,先把千位分隔符从原始字符串里删除,再检索小数分隔符的位置,避免千位分隔符和小数分隔符符号重合的区域出现判断错误。

内容的提问来源于stack exchange,提问作者yalcinpkr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:57:02