Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > .NET Framework > Forum > C# winApp จะแก้ตัวเลขยกกำลังแบบใหญ่บ้าง เล็กบ้าง ให้มีขนาดเท่ากันได้ยังไง บ้างครับ



 

C# winApp จะแก้ตัวเลขยกกำลังแบบใหญ่บ้าง เล็กบ้าง ให้มีขนาดเท่ากันได้ยังไง บ้างครับ

 



Topic : 136842



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook



หก

Code (C#)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormsApp5
{
    public static class SomeClass
    {

        private static readonly string superscripts = @"⁰¹²³⁴⁵⁶⁷⁸⁹";
        public static string ToSuperscriptNumber_(this int @this)
        {

            var sb = new StringBuilder();
            Stack<byte> digits = new Stack<byte>();

            do
            {
                var digit = (byte)(@this % 10);
                digits.Push(digit);
                @this /= 10;
            } while (@this != 0);

            while (digits.Count > 0)
            {
                var digit = digits.Pop();
                sb.Append(superscripts[digit]);
            }
            return sb.ToString();
        }

    }
    public static class SuperscriptNumber
    {
        //https://stackoverflow.com/questions/15042334/how-can-i-add-superscript-power-operators-in-c-sharp-winforms
        //https://en.wikipedia.org/wiki/Unicode_subscripts_and_superscripts
        //https://stackoverflow.com/questions/19682459/superscript-label-or-form-name
        private static readonly string superscripts = @"0123456789+-";
        private static string ToSuperscriptNumber(this int @this)
        {

            var sb = new StringBuilder();
            var digits = @this.ToString().ToArray();

            foreach (var digit in digits)
            {
                if (digit == '0')
                {
                    sb.Append(("\u2070"));
                }
                else if (digit == '1')
                {
                    sb.Append(("\u00B9"));
                }
                else if (digit == '2')
                {
                    sb.Append(("\u00B2"));
                }
                else if (digit == '3')
                {
                    sb.Append(("\u00B3"));
                }
                else if (digit == '4')
                {
                    sb.Append(("\u2074"));
                }
                else if (digit == '5')
                {
                    sb.Append(("\u2075"));
                }
                else if (digit == '6')
                {
                    sb.Append(("\u2076"));
                }
                else if (digit == '7')
                {
                    sb.Append(("\u2077"));
                }
                else if (digit == '8')
                {
                    sb.Append(("\u2078"));
                }
                else if (digit == '9')
                {
                    sb.Append(("\u2079"));
                }
                else if (digit == '+')
                {
                    sb.Append(("\u207A"));
                }
                else if (digit == '-')
                {
                    sb.Append(("\u207B"));
                }
            }
            return sb.ToString();
        }
        public static string ToSuperScript(this int number)
        {
            if (number == 0 ||
                number == 1)
                return "";

            const string SuperscriptDigits =
                "\u2070\u00b9\u00b2\u00b3\u2074\u2075\u2076\u2077\u2078\u2079";

            string Superscript = "";

            if (number < 0)
            {
                //Adds superscript minus
                Superscript = ((char)0x207B).ToString();
                number *= -1;
            }


            Superscript += new string(number.ToString()
                                            .Select(x => SuperscriptDigits[x - '0'])
                                            .ToArray()
                                      );

            return Superscript;
        }
        public static string ToSuperscriptNumber(this string @this)
        {
            var a = @this.Trim().Split('^');
            string s = "";
            if (a.Length == 2)
            {
                string _a = a[0].Trim();
                int _b = int.Parse(a[1].Trim());
                s = _a + _b.ToSuperscriptNumber();
            }

            return s;

        }
    }
}



Code (C#)
 private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            int yC = 20;
            for (int i = 1; i < 20; i++)
            {
                 e.Graphics.DrawString($"{random .Next(1,10) +  random.Next(1,10).ToSuperScript()}  + {random.Next(1, 10) +  random.Next(1, 10).ToSuperScript()} - {random.Next(1, 10) +  random.Next(1, 10).ToSuperScript()}= " ,
                            new Font("Cordia New", 20), new SolidBrush(Color.Black), 50, yC);
              

                yC += 50;
            }

          
        }




Tag : .NET, Win (Windows App), C#







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2022-10-11 15:35:44 By : lamaka.tor View : 706 Reply : 8
 

 
ลองสร้างเป็น extension method ให้กับ int

Code (C#)
public static class SomeClass {

    private static readonly string superscripts = @"⁰¹²³⁴⁵⁶⁷⁸⁹";
    public static string ToSuperscriptNumber(this int @this) {

        var sb = new StringBuilder();
        Stack<byte> digits = new Stack<byte>();

        do {
            var digit = (byte)(@this % 10);
            digits.Push(digit);
            @this /= 10;
        } while (@this != 0);

        while (digits.Count > 0) {
            var digit = digits.Pop();
            sb.Append(superscripts[digit]);
        }
        return sb.ToString();
    }

}


แบบเต็ม
https://stackoverflow.com/a/15042969




ถ้าไปเจอ แคลฯ แบบนี้ ทำไงครับ
https://www.kroobannok.com/news_file/p43027622133.pdf

...ผมขอตอบล่วงหน้า ว่าการ Draw เอง ต้องใช้ความพยายามสูงมาก เรียกว่า invent เลยก็ว่าได้
ซึ่งไม่มีตำราใดให้ถามตอบ แม้แต่ในเว็บนอก เพราะส่วนใหญ่เขาไม่ทำกัน


Quote:
ถ้าเป็นงานเกี่ยวกับ Math จะมีสิ่งอำนวยความสะดวกที่สามารถพิมพ์สมการต่างๆ ทางคณิตศาสตร์ได้ที่นิยม ได้แก่
LaTeX และ MathML
และแน่นอนว่า ไม่มีวิธีตรงหรือ Native way ในการทำใน WinForm
แต่ต้องสืบค้นการใช้ Library หรือทางเลี่ยง เช่น ดึงความสามารถจาก web-technology เข้ามาช่วย
แล้วใช้พวก MathJax, KaTex, etc สร้าง/สุ่ม สมการออกมาได้อย่างง่าย







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-10-11 16:20:25 By : 009
 


 
ตอบความคิดเห็นที่ : 1 เขียนโดย : 009 เมื่อวันที่ 2022-10-11 16:20:25
รายละเอียดของการตอบ ::
เพิ่งเห็นว่าคุณนำไปใช้แล้ว

ในลิงค์เดิม ได้ลองอีกวิธีหรือยังครับ
HtmlRender


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-10-11 16:25:47 By : 009
 

 

No. 3



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 2 เขียนโดย : 009 เมื่อวันที่ 2022-10-11 16:25:47
รายละเอียดของการตอบ ::
HtmlRender ที่ค้นเจอมักเป็น control จาก ไลบาลรี่ เลย ครับ มันใช้ได้ผลจริง
แต่ผมต้องการเอามาใช้ กับ string หรือ int เพื่อใช้ DrawString อ่ะครับ
เพราะต้องใช้ในการปริ้น ครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-10-11 16:40:31 By : lamaka.tor
 


 
ตอบความคิดเห็นที่ : 3 เขียนโดย : lamaka.tor เมื่อวันที่ 2022-10-11 16:40:31
รายละเอียดของการตอบ ::
ลองค้นด้วย keyword ใน No.1 โดยเฉพาะใน quote ดูครับ

แต่ถ้ายังยืนยันจะ Draw เอง ก็ต้อง invent เองเลยแหละ
ที่ผมคิดออกคือ จัดตำแหน่งและปรับขนาดเองทั้งหมด
โดยคำนวณจากพิกัด x, y ซึ่งยากและใช้เวลานานมากๆ
และผมคงให้คำแนะนำไม่ได้ เนื่องจากไม่มีประสบการณ์ในส่วนนี้

รอท่านอื่น หรือด้นเอง ลองผิดลองถูกไปครับ



โดยส่วนตัว ผมมองว่า LaTex คือสุดยอดของการพิมพ์ Math Equation ทั้งปวง
เพราะสามารถพิมพ์สมการที่ซับซ้อนได้ หาทางดึงมาใช้ให้ได้...เช่น ใช้ PDF reader เป็นต้น นี่คือสิ่งที่อยากแนะนำครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-10-11 17:29:23 By : 009
 


 

No. 5



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ผมลองไล่ดูตั้งแต่ 0-10 แล้วได้แบบนี้ ครับ

325

Code (C#)
 string ToSuperScript( int number)
        {
            if (number == 0 ||
                number == 1)
                return "";

            const string SuperscriptDigits =
                "\u2070\u00b9\u00b2\u00b3\u2074\u2075\u2076\u2077\u2078\u2079";

            string Superscript = "";

            if (number < 0)
            {
                //Adds superscript minus
                Superscript = ((char)0x207B).ToString();
                number *= -1;
            }


            Superscript += new string(number.ToString()
                                            .Select(x => SuperscriptDigits[x - '0'])
                                            .ToArray()
                                      );

            return Superscript;
        }



Code (C#)
private void Form1_Paint(object sender, PaintEventArgs e)
        {
        
         int y = 30;
        
         string s = "";
         for (int i = 0; i < 10; i++)
         {
                s = "";
                for (int a = 0; a < 11; a++)
                {
                 s +=a + ToSuperScript(i) + ",";
                }

                 e.Graphics.DrawString(s, new Font("Cordia New", 20), new SolidBrush(Color.Black), 50, y + (35 * i));
         }
        }

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-10-11 21:06:13 By : lamaka.tor
 


 
ตอบความคิดเห็นที่ : 5 เขียนโดย : lamaka.tor เมื่อวันที่ 2022-10-11 21:06:13
รายละเอียดของการตอบ ::
font ไม่ support ครับ


font for superscript
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-10-11 21:55:47 By : 009
 


 
ตอบความคิดเห็นที่ : 6 เขียนโดย : 009 เมื่อวันที่ 2022-10-11 21:55:47
รายละเอียดของการตอบ ::
https://www.fileformat.info/info/unicode/block/superscripts_and_subscripts/fontsupport.htm

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-10-11 21:57:16 By : 009
 


 

No. 8



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ขอบคุณมากครับ

1311

11

https://github.com/mongkonP/KidsLearning
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-10-11 22:53:58 By : lamaka.tor
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : C# winApp จะแก้ตัวเลขยกกำลังแบบใหญ่บ้าง เล็กบ้าง ให้มีขนาดเท่ากันได้ยังไง บ้างครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 02
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่