如何在C#中将建筑格式字符串转为英寸Double值?
处理建筑格式长度转英寸的C#方案
好问题!C#标准库本身确实没有专门针对建筑格式长度字符串的内置转换函数,但有几个现成的方案可以帮你避免从头写繁琐的字符遍历逻辑:
1. 使用第三方库UnitsNet(最推荐)
UnitsNet是一个专门处理单位转换和解析的开源库,完美支持你提到的所有建筑长度格式,包括分数、带小数点、不同分隔符(比如'-'或者直接空格)的情况。
首先通过NuGet安装UnitsNet包,然后就可以直接用:
// 解析各种格式的长度字符串 Length length1 = Length.Parse("1'-2\""); Length length2 = Length.Parse("1'-2 1/2\""); Length length3 = Length.Parse("1'0.5"); // 转换成英寸数值 double inches1 = length1.Inches; // 14.0 double inches2 = length2.Inches; // 14.5 double inches3 = length3.Inches; // 12.5
这个库会自动处理所有边缘情况,不用你自己写任何匹配逻辑,非常省心。
2. 利用WPF的LengthConverter(依赖WPF库)
如果你的项目是WPF应用,或者可以引用WPF相关的库(PresentationCore.dll),那么System.Windows.Media.LengthConverter可以帮你解析这类格式。需要注意的是,它返回的是WPF的设备无关单位(1英寸=96设备单位),所以要除以96得到英寸数:
var converter = new System.Windows.Media.LengthConverter(); // 解析字符串 object result = converter.ConvertFromString("1'-2 3/16\""); // 转换为英寸 double inches = (double)result / 96; // 得到14.1875
这个方案不需要额外安装NuGet包,但只能在能引用PresentationCore的项目中使用。
3. 正则表达式匹配(无依赖方案)
如果不想用第三方库也不想依赖WPF,正则表达式是比手动遍历字符更简洁的方案。下面的代码可以匹配你给出的所有示例格式:
using System.Text.RegularExpressions; public static double ConvertArchitecturalLengthToInches(string input) { // 匹配英尺、整数英寸、分数英寸的正则表达式 var pattern = @"^(?:(\d+)(?:'|’)(?:-?\s*)?)?(?:(\d+(?:\.\d+)?)(?:\s+(\d+)\/(\d+))?)?(?:""|”)?$"; var match = Regex.Match(input.Trim(), pattern, RegexOptions.IgnoreCase); if (!match.Success) throw new FormatException($"无法解析长度格式:{input}"); // 计算英尺部分 double feet = match.Groups[1].Success ? double.Parse(match.Groups[1].Value) : 0; // 计算整数英寸部分 double inches = match.Groups[2].Success ? double.Parse(match.Groups[2].Value) : 0; // 计算分数英寸部分 if (match.Groups[3].Success && match.Groups[4].Success) { int numerator = int.Parse(match.Groups[3].Value); int denominator = int.Parse(match.Groups[4].Value); inches += (double)numerator / denominator; } return feet * 12 + inches; }
调用这个方法就能得到你想要的Double类型英寸数值,代码量远少于手动遍历字符,也容易维护。
内容的提问来源于stack exchange,提问作者Tyler Cline
相关产品推荐
相关产品推荐

