iT邦幫忙

0

c#數字前面補0請求解惑

c#

各位大神好
寫程式遇到問題
希望各位大神能幫忙解答
原本能印出
EX:
0.AAAA
1.BBBB....
小弟想在顯示超過10後1-9前面補0(01)
顯示超過100筆則變為(001)的方式
中間加了一段
textBox3.Text = textBox3.Text.ToString().PadLeft(6, '0');
但只有顯示的第一個有變
其他顯示沒跟著補0請問我該怎麼改比較好?
000.AAAA
1.BBBB....


看了各位大神的寫法
小弟自己亂亂改結果可以了
但是使用者如果是輸入100筆以下
還是無法只出現01...
只能固定為001...3碼
還是有缺陷,只能在燒腦想

改過
            int k = 0;
            int j = 0;
            
            for (int i = 30; i < rece.Length; i++)
            {
                                                             
                if (k % 2 == 0)
                {
                   textBox3.Text += j.ToString("D3") + ".";
                   j++
                 }
                
                textBox3.Text += rece[i].ToString("X2");
                //textBox3.Text = textBox3.Text.ToString().PadLeft(6, '0');
                if (k % 2 != 0)
                {                    
                    textBox3.Text += "\r\n";                    
                }                                     
                k++;
                           
            }
看更多先前的討論...收起先前的討論...
slime iT邦大師 1 級 ‧ 2019-10-18 14:25:58 檢舉
看起來有點像:

"1.BBBB" 本身長度就是 6 , 所以 PadLeft 發現已經滿足, 就不會再補 0 .

所以修改原則大概是:
1. 先取序號(暫存在變數內).
2. 取內容(暫存在變數內).
3. 對序號比對總筆數, 進行補 0 .
4. 將補 0 後的序號, 加上點號空白辨識, 再加上內容.
我試試....
還有一個疑問
那為何1.AAAA
這筆前面會加2個0?
小弟我很蠢,抱歉....
slime iT邦大師 1 級 ‧ 2019-10-18 14:39:17 檢舉
可能:
1. 在 PadLeft 之前, textBox3 的長度為 4 , 所以補成 "00"+ "1234" .
2. 剛發現另一個情況, k 在這邊不確定有沒有影響, 也有可能 k % 2 != 0 所以沒有執行到補 0 這行.
好的!感謝,我再研究看看
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
海綿寶寶
iT邦大神 1 級 ‧ 2019-10-18 14:53:29

先處理數字(和.)的部份
再去接後面的 AAAA/BBBB
試試看

int k = 0;
int j = 0;

for (int i = 30; i < rece.Length; i++)
{
    textBox3.Text += j++ + ".";
    if (rece.Length > 99) 
    {  //三位數及以下
      textBox3.Text = textBox3.Text.ToString().PadLeft(4, '0');
    }
    else 
    {  //小於三位數
      textBox3.Text = textBox3.Text.ToString().PadLeft(3, '0');
    }

    textBox3.Text += rece[i].ToString("X2");
    if (k % 2 != 0)
    {                    
        textBox3.Text += "\r\n";                    
    }                                     
    k++;
}

感謝大大的回應(辛苦了)
但還是只有第1行有+0

改了一下
再試看看

感謝你的幫忙
雖然還是無法
辛苦了

1
YoChen
iT邦研究生 1 級 ‧ 2019-10-18 15:07:25

請參考MSDN官方文件
Standard Numeric Format Strings

for (int i = 0; i < rece.Length; i++)
    if (rece.Length < 10)
    {
        // 印出 1. 2. 至多到 9.
        textBox3.Text += i.ToString("D") + "." + rece[i]; 
    }
    else if (rece.Length < 100)
    {
        // 印出 01. 02. 至多到 99.
        textBox3.Text += i.ToString("D2") + "." + rece[i]; 
    }
    else
    {
        // 印出 001. 002. 至多到 999.
        textBox3.Text += i.ToString("D3") + "." + rece[i]; 
    }
}
0
小魚
iT邦大師 1 級 ‧ 2019-10-18 19:21:32

001 應該是因為 ToString("D3") 的緣故,
如果改成 ToString("D6") 就變成 000001

1
dragonH
iT邦超人 5 級 ‧ 2019-10-18 20:19:01

C# 好囉嗦喔XD

我是用 js 的思維去改的

ideone

using System;

public class Test
{
	public static void Main()
	{
		int[] rece = new int[500];
		for (int i = 1; i <= rece.Length; i += 1) {
			Console.WriteLine(new String('0', Math.Abs((i.ToString().Length) - 3)) + i.ToString());
		}
	}
}

想要幾位數就改

(i.ToString().Length) - 位數)

就好

所以你要的

根據使用者輸入 來變更位數

就把使用者輸入的值(筆數)轉字串取長度

放到位數

0
通靈亡
iT邦高手 1 級 ‧ 2019-10-19 11:32:37

C# 有一個String.Format 可以設定數值的字串格式
可以參考下方程式碼:

string myNumStr = String.Format("{0:00000.0000}", 876.54); // 輸出 00876.5400

其中00000.0000 代表整數有5位,小數點後有4位
只要整數位不足5位,或者小數點後不足4位數,就補0

https://docs.microsoft.com/zh-tw/dotnet/api/system.string.format?view=netframework-4.8

0
airwish
iT邦見習生 ‧ 2020-04-16 15:25:54

用ToString()就可以達成

string txtlist = txt_count.Tostring(); //總數轉字串取得位數

string strlen="";

for(int i=0;i<txtlist.Length;i++)
    strlen += "0";

若多個textBox要轉換,可以指定元件限制掃的範圍

foreach(Control x in (Your_form Or Item).Controls)
{
    //"textBox" + item_num 要轉換的元件名稱 ex: 1,2...etc whatever
    //若textBox有順序item_num跑迴圈便可,或用list紀錄名稱都可
    if(x is TextBox && x.Name == "textBox" + item_num)
    {
        string[] txt_spilt = x.Text.Split('.');
        
        x.Text = Convert.ToInt32(txt_spilt[0]).ToString(strlen) +"."+ txt_spilt[1];
    }
}

若只需單一個textBox

string[] txt_spilt = textBox3.Text.Split('.');
textBox3.Text=Convert.ToInt32(txt_spilt[0]).ToString(strlen) +"."+ txt_spilt[1];

我要發表回答

立即登入回答