分享在arduino 单片机中浮点数转换位数不够,精度丢失的解决办法

电子说

1.3w人已加入

描述

String NEMA2WGS84(String ddmmStr) {  //保留7位,由于单片机限制,必须放大到整数处理,否则小数点后面位数只有2位,不能直接用字符串转双精度函数

  int ind1 = ddmmStr.indexOf(".");

  int dot = ddmmStr.length() - ind1 - 1;                      //找到原来小数点位置,转换10的幂次方

  ddmmStr.replace(".", "");                                   //转换到整数

  String dd = ddmmStr.substring(0, ind1 - 2);                 //取出度整数部分

  String mm = ddmmStr.substring(ind1 - 2, ddmmStr.length());  //分

  int degrees = dd.toInt();

  double minutes = mm.toDouble() / (60);          //转换到分钟

  double dotl = 1 / powl(10, dot);                //缩小位数

  double res = (double)degrees + minutes * dotl;  //把整数在转换回小数

  // Serial.println(res, 7);

  return String(res, 7);

}

以上是我经过实际测试通过对,如果直接转换只有两位小数,现在已经可以到7位精度。

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分