簡體   English   中英

如何將任何整數值轉換為 2 位文本字符串

[英]How do you convert any whole number value into a 2-digit text string

我確定一定有一個數學方程式或某種我不熟悉的代碼可能能夠生成我正在尋找的東西,我正在嘗試找到一種方法來轉換任何給定的整數到 300,如果可能的話,最好是 9999,(沒有小數位)成一個唯一的 2 位字符串。 我可以接受包含文本字符、數字或符號的字符串。

我正在嘗試為我們的一組折扣數據創建自己的“唯一密鑰”。 我希望我可以使用它來將我們的“Min Qty”字段從它的數量轉換為某種標識符。 我最初的計划,我很難弄清楚如何制作,但會是這樣的:a = 2^1 * 9 (2^1=2, 所以 18) 如果值低於 18,它將使用“A_”,其中空白用乘數填充 2 以達到該值,如果為 1,則為 0。B 將繼續用於值大於 18 的記錄 EG:1 將等於 A0,17 將等於 A8,42 將相等(B 表示 18+后面的任何內容) B3 類似:18+(B=3*2)

如果有人有任何類似的提示,我會對此持開放態度。 我很想找到一種方法來截斷我放入這個唯一鍵的所有標識符並保持它們唯一。 目前我有一個 4 位數的折扣 ID、4 位數的日期“mmyy”開始日期和結束日期,以及始終在 1-400 之間的最小數量。

如果您對該應用程序感到好奇,這只是為了讓我在我們的報告中記錄一個唯一的“折扣行”,所以當我上傳到本地數據庫時,我會有一個可以匹配數據的 ID .

根據請求編輯我只需要一個由數值生成的唯一鍵。 目前我的唯一鍵是折扣 ID、SKU 和最小數量的串聯,但這需要 16 位數字。 我希望縮短折扣 ID 和最小數量,同時保持密鑰唯一。

折扣 ID 通常為 2000-995、2001-43、3031-1、2050-100 等。最小數量不會超過 400 go。SKU 也是一個數字值,介於 1-6 位之間。

目前,它很長,因為它看起來像:2000-995-00216-12,折扣 ID 2000-995,SKU 00216,最少 12

我很想找到一種方法來以任何可能的方式縮短它,同時保持唯一的鍵。

下面的代碼將 map 一個給定的小於 1.296 的整數轉換成一個兩位數的唯一字符串(由字符“0,1,2,3,..9”和“A,B,...Z”組成總共有 36 個字符,你有 36*36=1.296 種可能的組合。這對於 300 個字符來說已經足夠了,但對於 9.999 個字符來說就足夠了。

 Option Explicit

Const ANZ = 36
Function charOne(inpVal As Long) As String
    Dim x As Long
    
    ' first charcater based on the whole fraction
    ' which will be 0 for 36 following numbers
    x = Int(inpVal / ANZ)
    x = CLng(x)  ' just to avoid any floating point issues
    
    charOne = selChar(x)

End Function

Function charTwo(inpVal As Long) As String
    ' second character is based on the modulo
    ' which will count from 0 to 35
    charTwo = selChar(inpVal Mod ANZ)
End Function

Function mapTo2Chars(inpVal As Long) As String
    
    mapTo2Chars = charOne(inpVal) & charTwo(inpVal)
End Function

Function selChar(pos As Long) As String

    Dim ret As String
    Select Case pos
        Case Is <= 9
            ret = CStr(pos)
        Case Is >= 10
            ' A has the Ascii Code 65
            ret = Chr(65 + pos - 10)
    End Select

    selChar = ret

End Function

你可以用

Sub testit()
    Debug.Print mapTo2Chars(10)
    Debug.Print mapTo2Chars(887)
End Sub

如果可能存在任何字符,請使用 ascii 表:

TwoCharacterText = Chr(Value \ 256) & Chr(Value Mod 256)

但是我不清楚你打算如何使用它。

我最終弄明白了,Storax 給了我一個想法,我開始測試它,它似乎一直工作到 520。

這是我使用的公式: =IF(ISEVEN(VALUE(LEFT(TEXT($A1-(FLOOR($A1/100,1)*100),"00"),1))),INDEX(SUBSTITUTE(ADDRESS( 1,SEQUENCE(26),4),"1",""),MATCH(TRUE,$A1<SEQUENCE(26)*20,0))&RIGHT($A1,1),RIGHT($A1,1) &INDEX(SUBSTITUTE(ADDRESS(1,SEQUENCE(26),4),"1",""),MATCH(TRUE,$A1<SEQUENCE(26)*20,0)))

它使得如果 10 位是偶數(01、20、41 等),它將表示 20 的倍數的字母放在第一個字符中。

如果 10 位是奇數(10、34、51 等),則將字母放在第二個字符中。

另一個字符只是數字的最右邊的數字

在此處輸入圖像描述

我可能最終會嘗試添加第三個字符來幫助縮短 4 位數字,但我真的想將其保持為 2 位數字,所以現在可以使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM