极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17888|回复: 11

请问double类型我用串口显示怎么有10位小数?

[复制链接]
发表于 2015-11-26 13:05:18 | 显示全部楼层 |阅读模式

  1. double Xg;

  2. void setup() {               

  3.   Serial.begin(9600);
  4. }

  5. void loop() {

  6.   Xg=3/5.00;
  7.   Serial.println(Xg,DEC);
  8.   delay(1000);               // wait for a second
  9. }
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-11-26 14:49:55 | 显示全部楼层
改 float Xa;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-26 15:07:50 | 显示全部楼层
林定祥 发表于 2015-11-26 14:49
改 float Xa;


改了还是这样的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2015-11-26 17:22:00 | 显示全部楼层
你知道 Serial.print(double, int) 是什麼意思嗎?

你在列印 double/float 之後加上 DEC, 本身就有問題.   

被調用 Serial.print(double, int), 之後的 int 就是說明小數後的數字.  預設為 2.

而 DEC 的定義值為 10, 所以 Serial.print(double, 10) 就是要印出小數後10個位的 double.

float 跟 double 在這裡是沒分別的.  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-11-26 19:06:46 | 显示全部楼层
Super169 发表于 2015-11-26 17:22
你知道 Serial.print(double, int) 是什麼意思嗎?

你在列印 double/float 之後加上 DEC, 本身就有問題.  ...


感谢!终于搞明白了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2015-11-27 08:13:47 | 显示全部楼层
转换成字符串试试。
干嘛要小数输出呢?
也可以把要输出的数字分步打印;
例如:12.345
主要程序如下:A=12.345/1;//得到12;
                     B=((12.345-A)*1000)/1;//除以1是为了得到整数
打印输出:      Serial.print(A);
                     Serial.print(“.”)
                     Serial.println(B)//记得加“ln”换行。
试试吧分步打印。但是数字的精度就看自己的取舍了。
回复 支持 反对

使用道具 举报

发表于 2015-11-27 09:38:21 | 显示全部楼层
本帖最后由 Super169 于 2015-11-27 09:41 编辑
PINKWALKMAN 发表于 2015-11-27 08:13
转换成字符串试试。
干嘛要小数输出呢?
也可以把要输出的数字分步打印;


Serial.print (正式來說, 是源自 print) 本來就有針對 整數 及 小數 的兩個處理程序, 不用自己做吧.

你的做法也不用加上 "/1" 作轉換, 系統本來就可以做這種簡單的轉換, 加上 "/1" 只是畫蛇添足, 而且程式中也有錯.
試想想 1.01 的數值, 你會印出什麼?
回复 支持 反对

使用道具 举报

发表于 2015-11-27 10:03:44 | 显示全部楼层
天天向上/tp 发表于 2015-11-26 19:06
感谢!终于搞明白了

真的明白了?那麼改成以下,會有甚麼結果? (純粹交流,增加知識,不是吐糟,請明白!)

(一)    Serial.println(Xg,0);
(二)    Serial.println(Xg,150);
(三)    Serial.println(Xg,300);
(三)    Serial.println(Xg,600);
回复 支持 反对

使用道具 举报

发表于 2015-11-27 10:21:50 | 显示全部楼层
Super169 发表于 2015-11-27 09:38
Serial.print (正式來說, 是源自 print) 本來就有針對 整數 及 小數 的兩個處理程序, 不用自己做吧.

...

個人感覺,從初學者的理解的角度看,原回覆是很有啟發價值的,值得欣賞!
而回覆的補充,是指出進階學習的途徑,是相當有益的。
謝謝兩位!
回复 支持 反对

使用道具 举报

发表于 2015-11-27 14:24:31 | 显示全部楼层
eddiewwm 发表于 2015-11-27 10:03
真的明白了?那麼改成以下,會有甚麼結果? (純粹交流,增加知識,不是吐糟,請明白!)

(一)    S ...

給你這麼一問, 我才發現 print.h 跟 print.cpp 有點出入.
header 的設定是:
    size_t print(double, int = 2);

但最後的程式, 分開後就變成了:
size_t Print::printFloat(double number, uint8_t digits)

會出現什麼影響, 還是留待樓主測試一下吧.
回复 支持 反对

使用道具 举报

发表于 2015-11-27 14:36:12 | 显示全部楼层
本帖最后由 Super169 于 2015-11-27 14:37 编辑
eddiewwm 发表于 2015-11-27 10:21
個人感覺,從初學者的理解的角度看,原回覆是很有啟發價值的,值得欣賞!
而回覆的補充,是指出進階學習 ...


系統的源碼, 往往提供了很多值得學習的地方 (相信不會有太多人有興趣去看).

有關列印小數的部份, 在 print.cpp 中的 printFloat 就有清楚的做法, 當中也是分開整數及小數兩部份去處理, 對小數後的顯示, 有針對以零開始的小數部份的處理分法.  這部份跟整數部份不可以用同一方法直接 print, 否則就會失去了開頭的 0.
回复 支持 反对

使用道具 举报

发表于 2015-11-27 14:43:05 | 显示全部楼层
天天向上/tp 发表于 2015-11-26 19:06
感谢!终于搞明白了

看过Reference只读了前一般,其实后一半也解释用法.学习了.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 13:30 , Processed in 0.044123 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表