2017-05-24 162 views
2

我們在查詢中有一個字段,如果它太短,應該用零填充,我們使用Format()函數完成此操作。但是,有一些價值觀產生了奇怪的結果。格式函數返回錯誤的值

Format("14425112-8","00000000-00") 

返回值 「00019330-78」

對於大多數的投入,一如預期,8位數字,連字符,兩個數字的字符串被格式化。但在少數情況下,價值被修改。這對其他人是否可重複?有沒有人有解釋?

感謝您的幫助。

回答

1

這是一個訪問嘗試過於樂於助人的例子。它看起來像是將這些值解釋爲日期,但由於您沒有使用格式中的任何日期指示符,例如:(dd,mm,yyyy),它將1-1轉換爲日期,然後嘗試將其顯示在十進制形式:

debug.print Format("1-1","000000-00") 

回報000427-36這是十進制值42736,如果您轉換爲日期,成爲1/1/2017。這是什麼訪問解釋爲「1-1」。

似乎訪問已經保留了-字符作爲象徵日期格式,儘管如此their website says。此功能僅用於格式化實際日期或數字值(如價格)。如果您使用格式化功能,您必須將分隔符更改爲小數點,這顯然是唯一能夠爲您提供所需的前導零和尾隨零的字符。

否則,您可能必須爲此創建自己的功能。

+0

謝謝,夸克。這是寶貴的見解。 – Greenspark

1

你不能像這樣用數字格式化字符串。試試這個:

PaddedNumber = Right(String(8, "0") & "14425112-8", 10) 
+0

感謝您的信息,這是一個有趣的方式填充左零。但我真的希望瞭解格式函數爲什麼在這方面失敗了,而不僅僅是「你不能這樣做」。 – Greenspark

+0

格式化功能不會「失敗」。只是你不能將字符串格式化,就好像它們是數字一樣。所以要麼乾淨的字符串處理,要麼將字符串轉換爲數字,然後根據需要對其進行格式化。 – Gustav