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

C#中decimal.Parse解析"00.01"类字符串返回值不一致问题

问题原因与解决方案

核心问题是区域文化设置的差异导致解析结果不一致:

  • 你的VS/CLI测试环境使用的区域设置中,小数点分隔符是逗号,而点是千位分隔符。所以decimal.Parse("00.01")会把点当成千位分隔符,实际解析的是"0001",结果为1。
  • dotnetfiddle的环境使用的是小数点分隔符为点的区域设置,所以能正确解析"00.01"为0.01。
  • 当你把格式字符串改成逗号后,测试环境识别逗号为小数点,测试通过;但dotnetfiddle环境中逗号是千位分隔符,解析"00,01"就会得到1。

解决方案

1. 强制使用固定文化格式解析

在格式化TimeSpan和解析字符串时,都指定CultureInfo.InvariantCulture,它的小数点分隔符固定为点,不受环境影响:

using System.Globalization;

int totalMinutes = 1;
TimeSpan time = TimeSpan.FromMinutes(totalMinutes);
string timeStr = time.ToString("hh\\.mm", CultureInfo.InvariantCulture);
decimal result = decimal.Parse(timeStr, CultureInfo.InvariantCulture);

2. 直接通过数学计算实现(推荐)

跳过字符串转换的环节,直接用计算得到目标值,彻底避免文化差异问题:

decimal totalMinutes = 150;
decimal hours = Math.Floor(totalMinutes / 60);
decimal remainingMinutes = totalMinutes % 60;
decimal result = hours + remainingMinutes / 100;
// 150分钟会得到2.30

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 12:09:58