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

Dart/Flutter如何将分数格式字符串转换为double类型?

分数格式字符串转double用作aspectRatio的解决方案

一、分数字符串转double的实现方法

直接使用double.parse无法识别分数格式,需要先处理字符串、拆分分子分母后计算比值,具体步骤和代码如下:

  1. 清除字符串中的所有空格,统一格式
  2. 按/分割字符串得到分子和分母的字符串
  3. 将分子分母转为数值后相除,同时处理格式、数值异常

代码示例:

double parseAspectRatio(String ratioStr) {
  // 移除所有空格,统一成无空格的分数格式
  final cleanedStr = ratioStr.replaceAll(RegExp(r'\s+'), '');
  // 按/分割成分子和分母部分
  final parts = cleanedStr.split('/');
  
  // 格式校验:必须是两部分
  if (parts.length != 2) {
    throw FormatException('无效的宽高比格式:$ratioStr');
  }
  
  // 转换分子分母为数值
  final numerator = double.tryParse(parts[0]);
  final denominator = double.tryParse(parts[1]);
  
  // 数值有效性校验
  if (numerator == null || denominator == null || denominator == 0) {
    throw FormatException('宽高比中的数值无效:$ratioStr');
  }
  
  return numerator / denominator;
}

调用示例:

void main() {
  try {
    print(parseAspectRatio("16/9"));       // 输出 1.7777777777777777
    print(parseAspectRatio("16 / 9"));     // 输出 1.7777777777777777
    print(parseAspectRatio("9/16"));       // 输出 0.5625
    print(parseAspectRatio("9 / 16"));     // 输出 0.5625
  } catch (e) {
    print(e);
  }
}

二、更优的存储方式建议

如果可以控制存储格式,优先选择以下两种方式,比存储字符串更可靠:

  • 直接存储计算后的double值:比如存储1.7777777777777777(对应16/9),使用时直接读取赋值给aspectRatio,无需转换,效率更高,避免转换异常。
  • 存储分子分母的数值结构:比如用键值对{"width":16, "height":9}或者数组[16,9]存储,读取时直接取两个数值相除,比处理字符串更稳定,还能保留原始的宽高比例数值信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:15:38