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

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

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

 8.5 ==> round to nearest ==> 8

9.5 ==> round to nearest ==> 10

[+]放大圖片

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


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

最主要的一點

你當初輸入8.5的時候

你確定他是8.5000000000000000000000

還是8.4999999999999999999999

你沒辦法確定@@

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

這是沒辦法的

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


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

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

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


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

我就是這個意思

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


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

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

需要加什麼嗎?

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


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

我不是大大啦

我也在學習中

大家討論討論而已

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

我不知道答案

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

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

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

 

不過有偷雞的方法

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

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

然後取整數

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

最後再去除以10^5

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


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

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

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

[+]放大圖片

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


創始會員    
暱稱:timko
經驗值:597
等級:導師
發文: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
經驗值:2629
等級:高手
發文:64
回文:984
版本: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
經驗值:2629
等級:高手
發文:64
回文:984
版本: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
經驗值:597
等級:導師
發文: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. 讀bin檔問題
2. 請問 Hi Technic color sens...
3. SignalExpress +Agilent 3...
4. 設定vision assistant 影像處理後...
5. wintel平台的單板
6. 有人知道這是人麼控制刀徑軟體嗎?(內有圖片)
7. 如何利用labview去讓攝影機作上下左右的控制
8. labview 如何控制 攝影機的 pan ...
9. 示波器擷取
10. UMI-7764如何使用LABVIEW動作
 
   Top 5 熱門討論 
1. 畫面如何嵌入LabVIEW的UI
2. 讀bin檔問題
3. NI Measurement & Automat...
4. activex event callback f...
5. 請問 Hi Technic color sens...
 
學習中心
 
 
LabVIEW討論區 站長信箱 關於我們 站內聲明
美商國家儀器贊助;Sponsored by NI.
© 2010 National Instruments, Taiwan. All rights reserved. design by begonia