【问题标题】:Positive input exceeds the limit of integer - dart正输入超出整数限制 - dart
【发布时间】:2022-07-22 18:06:23
【问题描述】:

我有这个函数可以将十六进制转换为双精度。这些值是一些坐标,因此纬度应该是正数,经度应该是负数。

类似这样的:

41.43757591162915,-8.418569400003188

对于纬度工作正常,但在尝试转换经度时返回错误。

预期值:-8.418569400003188 转换自 C020D67F4DBDF8F5

我读到了这个错误,似乎是因为该值超出了范围的限制。

 double convert(String hexString) =>
      (ByteData(8)..setUint64(0, int.parse(hexString, radix: 16)))
          .getFloat64(0);

  void _processHexDouble(hexString, _regexVar, String name, String _toSplit) {

    final a = _regexVar.firstMatch(hexString);
    final _matchedRegex = a?.group(0); //A9C020D67F4DBDF8F5
    // var number = 0.0;

    try {
      if (_matchedRegex != null) {
        var _splitRegex = _matchedRegex.split(_toSplit);

        print('$name -> ${convert(_splitRegex[1])}'); //C020D67F4DBDF8F5
        // print('$name -> ${number}');
        _logResponses =
            "${_logResponses} $name -> ${convert(_splitRegex[1])} \n";
      }
    } on Exception catch (e) {
      print(e);
    }
  }

如何在不触发此错误的情况下解决此问题?有没有办法限制转换时值的大小,使其小于限制?

【问题讨论】:

    标签: flutter dart integer hex double


    【解决方案1】:

    检查添加到我对您上一个问题的回答中的更新解决方案(在 lrn 反馈后添加):https://stackoverflow.com/a/73065950/1953515

    解决了这个问题:

    import 'dart:typed_data';
    
    void main() {
      print(convert('C020D67F4DBDF8F5')); // -8.418940000000001
    }
    
    double convert(String hexString) {
      final String hexStringPadded = hexString.padLeft(16, '0');
    
      return (ByteData(8)
        ..setInt32(0, int.parse(hexStringPadded.substring(0, 8), radix: 16))
        ..setInt32(4, int.parse(hexStringPadded.substring(8, 16), radix: 16)))
          .getFloat64(0);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      • 2011-03-07
      • 1970-01-01
      • 2020-08-24
      • 2018-12-16
      相关资源
      最近更新 更多