LabVIEW Pro 專業論壇-技術討論區-Round to nearest 四捨六入, 五不一定
 
     
 
 
 
LabVIEW 討論區基礎教學每月專題分享技術問題精選online Test
技術討論區 程式分享區 教育訓練與認證區 閒話家常區 工作機會討論區 回報區 IRHOCS 機器人競賽 2014 LabVIEW 國際挑戰賽-Taiwan
 熱門關鍵字 
     2014 LabVIEW 國際挑戰賽    轉檔不求人    隨身碟名片卡-兌換贈品新亮相!!!    Mathscript    每日一 View    物件導向
 您的位置:首頁 > 技術討論區 > Round to nearest 四捨六入, 五不一定
  技術討論區   板主:meiae
 之2(17篇)
[1] 2
Round to nearest 四捨六入, 五不一定 
 
newefamily

2013 LabVIEW 至尊爭霸賽參賽者    
暱稱:Aaron
經驗值:2614
等級:高手
發文:63
回文:978
版本:LabVIEW 2011
闖關狀態:
刀鋒谷
前往地圖:
 
字級設定

一般程式的 Round 都是四捨五入,為什麼 LabVIEW 沒有四捨五入的 Function,而是有四捨六入、五不確定呢?! 這是依據什麼標準來進位或去尾的呢?

 8.5 ==> round to nearest ==> 8

9.5 ==> round to nearest ==> 10

[+]放大圖片

已解決!轉到解決方案
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
為什麼看不到簽名檔?好怪
  文章人氣: 21257 讚:0 文章日期:2010/06/28 11:20
agody2000


創始會員    
暱稱:蔣公
經驗值:1744
等級:高手
發文:32
回文:510
版本:LabVIEW 2011
闖關狀態:
迷霧森林
前往地圖:
1樓
字級設定

最主要的一點

你當初輸入8.5的時候

你確定他是8.5000000000000000000000

還是8.4999999999999999999999

你沒辦法確定@@

所以自然就會有這個問題產生

這是沒辦法的

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    讚:1 文章日期:2010/06/28 14:26
newefamily


2013 LabVIEW 至尊爭霸賽參賽者    
暱稱:Aaron
經驗值:2614
等級:高手
發文:63
回文:978
版本:LabVIEW 2011
闖關狀態:
刀鋒谷
前往地圖:
2樓
字級設定

大大的意思是說:『當我按 8.5 Enter 的時候,電腦收到的有可能是 8.499999999 嗎?』

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
為什麼看不到簽名檔?好怪
    讚:0 文章日期:2010/06/28 15:30
agody2000


創始會員    
暱稱:蔣公
經驗值:1744
等級:高手
發文:32
回文:510
版本:LabVIEW 2011
闖關狀態:
迷霧森林
前往地圖:
3樓
字級設定

我就是這個意思

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    讚:0 文章日期:2010/06/28 16:44
newefamily


2013 LabVIEW 至尊爭霸賽參賽者    
暱稱:Aaron
經驗值:2614
等級:高手
發文:63
回文:978
版本:LabVIEW 2011
闖關狀態:
刀鋒谷
前往地圖:
4樓
字級設定

再請教大大一個問題: 那要如何輸入8.5 Enter 之後, 讓電腦也接收到 8.5, 而不是 8.49999999 ?

需要加什麼嗎?

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
為什麼看不到簽名檔?好怪
    讚:0 文章日期:2010/06/29 00:00
agody2000


創始會員    
暱稱:蔣公
經驗值:1744
等級:高手
發文:32
回文:510
版本:LabVIEW 2011
闖關狀態:
迷霧森林
前往地圖:
5樓
字級設定

我不是大大啦

我也在學習中

大家討論討論而已

關於你說的這個問題喔@_@

我不知道答案

電腦的精準度本來就會產生這類的問題

所以盡量避免去做一些動作

像是兩個實數去做等於    <=這種動作

 

不過有偷雞的方法

你自己先假設你可以容許的誤差在小數點幾位(假設5位好了)

然後把你現在的數值乘以10^5

然後取整數

在自己用判斷式來決定要不要砍掉10^5以內的那些整數項以及要不要進位

最後再去除以10^5

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    讚:0 文章日期:2010/06/29 00:58
newefamily


2013 LabVIEW 至尊爭霸賽參賽者    
暱稱:Aaron
經驗值:2614
等級:高手
發文:63
回文:978
版本:LabVIEW 2011
闖關狀態:
刀鋒谷
前往地圖:
6樓
字級設定

大大: 我的資歷更淺, 還是尊稱你為大大好了!

想來想去還是覺得怪怪的: 我覺得輸入的值應該是8.5, 而不會是8.49999, 如果使用者輸入8.5, 電腦讀進來是8.49999會天下大亂吧! 如下圖

[+]放大圖片

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
為什麼看不到簽名檔?好怪
    讚:0 文章日期:2010/06/29 08:15
timko


創始會員    
暱稱:timko
經驗值:596
等級:導師
發文:32
回文:291
版本:LabVIEW 2009
闖關狀態:
前往地圖:
7樓
字級設定

原因應該是出在 double 浮點數, 它是 64-bit, 所以是有極限的, 並非所有的數值都可以被完全表示 (小數點後的位數是有限制的...), 所以用 double 做部分處理或比較時要特別小心...

針對 Round To Nearest 的需求, 可以把程式改成這樣...

[+]放大圖片

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
附件檔案:    
RoundToNearest.vi
  版本:LabVIEW 2009
Front Panel
Block Diagram
 
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    讚:0 文章日期:2010/07/01 11:39
newefamily


2013 LabVIEW 至尊爭霸賽參賽者    
暱稱:Aaron
經驗值:2614
等級:高手
發文:63
回文:978
版本:LabVIEW 2011
闖關狀態:
刀鋒谷
前往地圖:
8樓
字級設定

0.5~16.5 只需要8個bit即可處理,不像是 double 的關係吧?! 如果是的話, 不管用哪一種方法8.4999999 絕對不會等於 8.5000000 的。而且大大用的二種方式所得的答案不盡相同,代表Input 的值是相同的,並不是 Array2 接收到 8.4999999  Array3 接收到 8.500000。我覺得比較有可能是以下二種原因

1. Bug

2. Round to nearest 在初始定義上跟本就不是四捨五入,LabVIEW 沒有四捨五入的 Function,需要自己寫。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
為什麼看不到簽名檔?好怪
    讚:0 文章日期:2010/07/01 12:15
newefamily


2013 LabVIEW 至尊爭霸賽參賽者    
暱稱:Aaron
經驗值:2614
等級:高手
發文:63
回文:978
版本:LabVIEW 2011
闖關狀態:
刀鋒谷
前往地圖:
9樓
字級設定

忘了說明:小數點 0.5 在 2進制 的表示如下:

4bit: 1000

8bit: 10000000

16bit: 1000000000000000

32bit: 10000000000000000000000000000000

64bit: 1000000000000000000000000000000000000000000000000000000000000000

以上僅代表 0.5 不管是多少 bit, 後面只是補 0 而已(整數不含在內來討論)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
為什麼看不到簽名檔?好怪
    讚:0 文章日期:2010/07/01 12:24
timko


創始會員    
暱稱:timko
經驗值:596
等級:導師
發文:32
回文:291
版本:LabVIEW 2009
闖關狀態:
前往地圖:
10樓
字級設定

Round To Nearest 的 Help 說明有提到:

If the value of the input is midway between two integers (for example, 1.5 or 2.5), the function returns the nearest even integer (2).

所以遇到 0.5 就會被取到偶數...

這不是 bug, 只能說是一個標準, http://digital.ni.com/public.nsf/allkb/7ED5A95B08D7DF37862565A800819D2D?OpenDocument

所以要達到真正的四捨五入就要自己做囉...

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    讚:1 文章日期:2010/07/01 12:49
 之2(17篇)
[1] 2
 
 
   會員中心 
帳號:
     
密碼:
     
  以後自動登入
 
註冊
   待回覆文章 
1. 無法繳交挑戰賽答案
2. 使用DAQmx輸出sine wave的波行不連續
3. 無法上傳
4. 求助如何用Labview的arduino.vi ...
5. 一組Queue控制單台儀器與二組Queue制制雙...
6. 請問peak search 如何存檔??
7. Data Dashboard 共享变量
8. 如何設計轉動平台控制程式 以後會用在大型專案裡
9. 用labview儲存DS1052e示波器
10. Labview與8051做連結
11. 在labVIEW中看不到特定路徑內的資料夾或檔案...
12. XY GRAPH的Properties請問
13. Graph圖形 X軸顯示的時間延遲
14. 平均迴圈內的結果
 
   Top 5 熱門討論 
1. 使用DAQmx輸出sine wave的波行不連續
2. 關於呼叫Sub Vi
3. 求助如何用Labview的arduino.vi ...
4. 一組Queue控制單台儀器與二組Queue制制雙...
5. 請問peak search 如何存檔??
 
學習中心
 
 
LabVIEW討論區 站長信箱 關於我們 站內聲明
美商國家儀器贊助;Sponsored by NI.
© 2010 National Instruments, Taiwan. All rights reserved. design by begonia