PRB: 計算標準--標準差--提供數值溢位

文章翻譯 文章翻譯
文章編號: 172084 - 檢視此文章適用的產品。
本文已封存。本文係以「現狀」提供且不會再更新。
全部展開 | 全部摺疊

在此頁中

徵狀

在計算標準差使用計算 STD() 函式時 FoxPro 可以透過各種範圍的資料錄就上特定數值傳回數值溢位的結果。

解決方案

使用自訂的常式會計算標準差。下列程式接受兩個參數為資料表欄位。然後它會之前先計算標準差計算各種總合及產品的欄位。建立一個程式稱為 std 並輸入下列程式碼:
   * Call this program by ?std("TableName","FieldName") or
   * by assigning the result to a variable, y= std("TableName","FieldName")
   *
      PARAMETER mtable mfield
      SELECT SUM(&mfield^2) FROM (mtable) INTO ARRAY yy
      SELECT SUM(&mfield)^2 FROM (mtable) INTO ARRAY zz
      SELECT COUNT(&mfield) FROM (mtable) INTO ARRAY xx
      stdev=((xx*yy-zz)/xx^2)^.5
      RETURN ROUND(stdev,12)
				
如果名為值的資料表包含了欄位 num 命令視窗中輸入此命令:
   ?std("values","num")
				

狀況說明

Microsoft 研究這個問題,並且將張貼新資訊 「 Microsoft 知識庫 」 中可用時。

其他相關資訊

當資料表包含相同的重複真實值透過不同廣泛範圍的記錄,通常被上述數值溢位。比方說如果資料表含有 10 筆記錄,且每一筆記錄的值為 0.031,計算 STD() 將會產生溢位。這可以視值和記錄數目會有所不同。

一種偵測發生數值溢位的方法,就是到桌面或等候的視窗中顯示計算 STD() 結果。如果 SET 通話 ON 結果會顯示在桌面上會自動。如果發生溢位會顯示所有的星號。而且,如果計算 STD() 結果已附加,或取代資料表中的數字欄位,可能會發生下列錯誤:
數值溢位。資料已遺失。

重製行為的步驟

在程式中輸入下列程式碼,並執行它:
   CLEAR
   SET SAFETY OFF
   SET DECIMALS TO 12
   CREATE TABLE stdresult (num N(15,8)) &&Table for result of calculation
   APPEND BLANK
   CREATE TABLE stdtest (num N(15,8))   &&Table of values for calculation
   FOR i = 1 TO 10
      INSERT INTO stdtest(num) VALUES (0.031)
   ENDFOR

   FOR i = 1 TO RECCOUNT()
      ?ALLTRIM(STR(i))+" "
      SET TALK OFF
      CALCULATE STD(num) FOR RECNO()<i TO nresult && Comment this line &
                                                  && the next line once
                                                  && you uncomment the
                                                  && commented lines below.

      ??nresult

      *nresult=custstd('stdresult','num') && Uncomment this line & the next
                                          && line to compute & display the
                                          && standard deviation with a
                                          && user-defined function.

      *?nresult
      SELECT stdresult
      REPLACE num WITH nresult   &&Overflow error on 10th iteration
      SELECT stdtest
   ENDFOR

   SET SAFETY ON
   SET TALK ON
   SET DECIMALS TO 2

   PROCEDURE custstd
   PARAMETER mtable mfield
   SELECT SUM(&mfield^2) FROM (mtable) INTO ARRAY yy
   SELECT SUM(&mfield)^2 FROM (mtable) INTO ARRAY zz
   SELECT COUNT(&mfield) FROM (mtable) INTO ARRAY xx
   stdev=((xx*yy-zz)/xx^2)^.5
   RETURN ROUND(stdev,12)
				
接續在執行這個程式碼首先九個反覆項目應為所有零。 計算會所有星號,將會產生溢位錯誤訊息上 REPLACE 命令。

屬性

文章編號: 172084 - 上次校閱: 2014年3月1日 - 版次: 2.1
這篇文章中的資訊適用於:
  • Microsoft Visual FoxPro 3.0 Standard Edition
  • Microsoft Visual FoxPro 3.0b Standard Edition
  • Microsoft Visual FoxPro 5.0 Standard Edition
  • Microsoft Visual FoxPro 5.0a
  • Microsoft Visual FoxPro 3.0 for Macintosh
關鍵字:?
kbnosurvey kbarchive kbmt kbcode kbprb KB172084 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:172084
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com