例如,我使用字母數字字符串'ABCDEF 0 0.450',並且需要將數字「0.450」作爲數字小數進行運算。我們有辦法嗎?請建議。如何在COBOL中將字母數字字符串轉換爲數字小數
回答
通常情況下,我可以找到一種方法來實現它!
如上所述,UNSTRINGing和組合並沒有工作,但REDEFINES的作品!
將字母數字字符串重新定義爲兩個數字字段,以分別保存和處理小數部分和整數部分。 Atlast將十進制總數除以1000並將其添加到整數部分。而已!代碼片段遵循...
01 WS-NUM-STR PIC X(14) VALUE 'ABCDEF 0 0.450'.
01 WS-NUM-STR-MOD REDEFINES WS-NUM-STR.
05 FILLER PIC X(9).
05 WS-INT-PART PIC 9.
05 FILLER PIC X.
05 WS-DEC-PART PIC 999.
----------
----------
* CODE TO ADD ALL INTEGER PARTS
* CODE TO ADD ALL DECIMAL PARTS
COMPUTE = INTEGER-TOTAL + (DECIMAL-TOTAL/1000)
注:正如我已經知道了小數部分有3個數字,我的1000希望你能想出分十進制TOTAL。
並請建議任何其他方式來實現相同!
是的,對於一個固定的格式來定義一個相應的結構我懷疑你需要重新定義這個字段WS-NUM- STR由pic x(9)的虛擬字段和pic 9.999的值字段組成? – Kwebble 2010-04-04 22:10:48
由於我對數字字段很感興趣,所以對填充符沒有任何疑問,但是已經在上面更新了。將要重新定義PIC 9.99的值字段9不起作用,因爲9.999是一種圖片編輯類型,它對顯示/輸出目的很有用,並且仍然無法執行所需的算術運算。勒米知道你在想什麼。 – 2010-04-06 17:06:45
您不需要除以1000.只需將WS-DEC-PART定義爲PIC V999和ADD即可。如果這樣做,你應該檢查小數點是小數點,你應該檢查你的數字字段是數字。 – 2013-10-11 23:19:17
我認爲格式不固定,因爲那樣你就可以選擇那部分字符串並將它移動到圖9.999中定義的字段並從那裏使用它。
這裏假定字符串值由3個空格分隔的部分組成。首先定義某些字段:
1 part1 pic x(14).
1 part2 pic x(14).
1 part3 pic x(07).
1 digitsAn.
2 digits pic 9(03).
1 decimalsAn.
2 decimals pic .9(03).
1 theValue pic 9(03)v9(3).
的的後綴是從我的命名約定,並表示字母數字值。如果字符串輸入可能更長,則根據需要增加尺寸。
其餘代碼將theString分解爲該值。
* Extract the third part.
initialize part3
unstring theString delimited by all spaces into part1 part2 part3
* make sure the receiving field contains numeric data.
inspect part3 replacing spaces by zeroes
* extract digits before and after the decimal point.
unstring part3 delimited by "." into digits decimalsAn(2:)
* Combine parts before and after decimal points into a numeric value.
compute theValue = digits + decimals
請注意,我沒有通過編譯器運行它!
Kwebble,UNSTRINGing進一些非STRING變量不起作用。 ,接收字段應該是'STRING',你怎麼說? – 2010-03-31 17:10:16
一個錯字,第一個接收字段應該是digitsAn而不是數字:unstring part3用「。」分隔爲digitsAn decimalsAn(2 :) – Kwebble 2010-04-04 21:58:46
你不能定義你的字段小數點就像這樣,並在COMPUTE中使用它應該是V999編譯器我知道無論如何 – 2013-10-11 23:17:29
在大多數現代的Cobol編譯器中,您可以將數字編輯的字段移動到數字字段。從下面的例子
借款:
01 WS-NUM-STR PIC X(14) VALUE 'ABCDEF 0 0.450'.
01 WS-NUM-STR-MOD REDEFINES WS-NUM-STR.
05 FILLER PIC X(9).
05 WS-EDITED-NUMBER PIC 9.999.
01 WS-NUMBER PIC 9V999.
----------
MOVE WS-EDITED-NUMBER TO WS-NUMBER
,然後做WS-NUMBER計算。
我試過一樣,但沒有工作。更多的我得到了SOC7異常結果。所以必須去其他方式..無論如何感謝您的興趣和反應吉爾伯特 – 2010-05-15 15:45:16
對不起,這不適合你的編譯器。 – 2010-05-16 00:05:33
將它移動到數字字段的問題是ABCDEF實際上是有效的分區十進制數字。如果空格不存在,ABCDEF不會給你一個問題,但不會給你你期望的結果,因爲它會被錯誤地解釋爲數字。 通過在中間運算域上引發SOC7(數值異常),空間確實對您有利。 – 2010-06-09 01:54:33
對於例如,我有字母數字字符串 「ABCDEF 0 0.450」,我需要得到 「0.450」作爲數字小數和做它 算術。我們有辦法嗎? 請建議。
如果您正在CICS中運行,您可以使用BIF DEEDIT函數 - 這將使您留下「00.450」。
如果您沒有在CICS運行,假設你有你在一個名爲WS-STR場字符串:
Move 0 to JJ
Perform varying II from 1 by 1
until II > Length of WS-STR
Evaluate WS-STR (II:1)
when '0'
when '1'
when '2'
when '3'
when '4'
when '5'
when '6'
when '7'
when '8'
when '9'
when '.'
Add 1 to JJ
Move WS-STR (II:1) to WS-NUM (JJ:1)
* ---- Do nothing
when other
continue
End-Perform
Compute REAL-DEC-NUM = Function NUM-VAL (WS-NUM)
這類似於在小數點附近手動移動數字字段'。'對!謝謝你的時間... – 2010-06-08 15:43:09
- 1. 在Python中將字母數字字符串轉換爲數字字符串
- 2. 如何將字符串中的字母轉換爲數字 - C++
- 3. 如何將數字轉換爲字符串(字母)在PHP?
- 4. 如何將字母數字字符串轉換爲R中的數字?
- 5. 將字母數字字符串轉換爲java中的字節?
- 6. 將數字字符串/字母數字轉換爲PHP中的數字
- 7. 將字節字符串轉換爲java中的字母數字字符數組?
- 8. SQL Server,將字母數字字符串轉換爲大寫字母數字
- 9. 將字母數字字符串轉換爲整數格式
- 10. 將一串字母轉換爲數字
- 11. 將comp-2轉換爲cobol中的字母數字
- 12. 如何將數字字符串轉換爲數字(十進制)並將數字轉換爲字符串
- 13. 如何將字符串分數和數字轉換爲數字?
- 14. HttpResponse作爲字符串 - 將數字轉換爲字母
- 15. Java:如何將字母數字字符串轉換爲整數並從整數轉換爲相同的字母數字字符串?
- 16. 如何seprate字母數字字符串轉換成數字和字母
- 17. 如何在Oracle中將字節字符串轉換爲數字?
- 18. 轉換爲數字字符串,數字
- 19. 將字母數字字符串轉換爲亂碼條形碼?
- 20. 轉換數字字符字母字符
- 21. 在Perl中將大整數轉換爲字母數字字符串
- 22. 在Ruby中將數字字符串轉換爲數字
- 23. 如何將指數數字字符串轉換爲整數字符串
- 24. 在Applescript中將數字轉換爲等效的字母字符
- 25. 將字符串中的字母轉換爲數組
- 26. Java-Android如何將字符串中的字母轉換爲指定的數字
- 27. PHP將20個字母數字字符串轉換爲10個字母數字字符
- 28. Knockout.js將數字轉換爲字符串
- 29. Android:EditTextPreference將字符串轉換爲數字
- 30. 將數字字符串轉換爲sqldbtype
你不希望看到的零(「ABCDEF ** 0 ** 0.450」 )?如果不是,我們如何區分你想要「看到」的數字和那些你不想看到的數字? – NealB 2010-03-29 14:34:17
Neal,明確提到「我需要得到'0。450'作爲數字小數,並對其進行算術運算「,這樣你就應該回答了,否則請讓我知道你是不是正在查看。 – 2010-03-31 03:03:04