.NET

2009-10-12 5 views
8

के साथ बड़ी संख्या स्वरूपण करना मुझे 4,316,000 जैसे "4.3 मीटर" के रूप में बड़ी संख्या में प्रारूपित करने की आवश्यकता है।.NET

मैं इस सी # में कर सकते हैं?

+1

उम, प्रोग्रामिंग भाषा? प्लेटफार्म? यहां हमें मदद करें। संक्षिप्त उत्तर यह है: आवश्यकताओं के आधार पर मूल्यों की विभिन्न श्रेणियों को प्रारूपित करने के लिए कुछ कोड लिखें। –

+1

@Jim: सी # प्रश्न के लिए टैग में है। प्रश्न थोड़ा और स्पष्ट करके मदद कर सकता है। –

+0

जिम एक ट्रोल है! –

उत्तर

17

आप Log10 का उपयोग सही तोड़ निर्धारित करने के लिए कर सकते हैं। कुछ इस तरह काम कर सकता था:

double number = 4316000; 

int mag = (int)(Math.Floor(Math.Log10(number))/3); // Truncates to 6, divides to 2 
double divisor = Math.Pow(10, mag*3); 

double shortNumber = number/divisor; 

string suffix; 
switch(mag) 
{ 
    case 0: 
     suffix = string.Empty; 
     break; 
    case 1: 
     suffix = "k"; 
     break; 
    case 2: 
     suffix = "m"; 
     break; 
    case 3: 
     suffix = "b"; 
     break; 
} 
string result = shortNumber.ToString("N1") + suffix; // 4.3m 
+1

के लिए मतदान किया चाहता है नहीं करता है, तो सत्य। –

+0

को ओकाम के रेज़र दृष्टिकोण से प्यार होना चाहिए! – code4life

2

डिवाइड 1,000,000.0 द्वारा संख्या है, तो एक "एम" जोड़ देते हैं।

1 दशमलव स्थान तक संख्या पूर्णांक बनाना याद है।

+0

इस काम करता है अगर यह हमेशा लाखों लोगों की क्या करने की कोशिश कर रहा है, लेकिन वह हजारों, लाखों, करोड़ों-अरबों आदि –

+0

सवाल 4,316,000 के रूप में "4.3M" की तरह संख्या के बारे में पूछा गया तो अन्य प्रारूपों जरूरतों के मामले में नहीं थे :) –

1
long valueToFormat = 4316000; 
var dict = new Dictionary<long, string>() { 
    {1000000000, "b"}, 
    {1000000, "m"}, 
    {1000, "k"} 
}; 

string formattedValue = valueToFormat.ToString(); 
foreach (long n in dict.Keys.OrderBy(k => k)) { 
    if (valueToFormat < n) { 
     continue; 
    } 
    double value = Math.Round(valueToFormat/(double)n, 1); 
    formattedValue = String.Format("{0}{1}", value, dict[n]); 
} 
Console.WriteLine(formattedValue); 
1

आप केवल Windows पर चला रहे हैं आप C# या VB.NET में एक पी आह्वान घोषणा इस्तेमाल कर सकते हैं कॉल करने के लिए कार्य करता है Win32 StrFormatByteSizeW या StrFormatByteSize64। यदि आपके एप्लिकेशन/साइट को कम से कम Vista SP1 या Server 2008 पर चलने की गारंटी है तो कुछ और विकल्पों के साथ StrFormatByteSizeEx भी है। MSDN डॉक्स से

नमूना:

Numeric value Text string 
532    532 bytes 
1340   1.30KB 
23506   22.9KB 
2400016   2.29MB 
2400000000  2.23GB 

ये API भी गैर अंग्रेजी उपयोगकर्ताओं के लिए सही ढंग से स्थानीयकरण संभाल।

+0

यह "4.3M" के रूप में 4,316,000 करना होगा नहीं, जैसे प्रश्न पूछा है, बल्कि "4.12MB" –

+0

ओह, प्रश्न, द्विआधारी divisors के बारे में के रूप में दशमलव divisors के बजाय पढ़ें। – devstuff

2
public static class Program 
{ 
    private static void Main(string[] args) 
    { 
     double[] numbers = 
     { 
      3000, 3300, 3333, 30000, 300000, 3000000, 3000003, 0.253, 0.0253, 0.00253, -0.253003 
     }; 

     foreach (var num in numbers) 
     { 
      Console.WriteLine($"{num} ==> {num.Humanize()}"); 
     } 

     Console.ReadKey(); 
    } 

    public static string Humanize(this double number) 
    { 
     string[] suffix = {"f", "a", "p", "n", "μ", "m", string.Empty, "k", "M", "G", "T", "P", "E"}; 

     var absnum = Math.Abs(number); 

     int mag; 
     if (absnum < 1) 
     { 
      mag = (int) Math.Floor(Math.Floor(Math.Log10(absnum))/3); 
     } 
     else 
     { 
      mag = (int) (Math.Floor(Math.Log10(absnum))/3); 
     } 

     var shortNumber = number/Math.Pow(10, mag*3); 

     return $"{shortNumber:0.###}{suffix[mag + 6]}"; 
    } 
} 

यह चाहिए उत्पादन:

3000 ==> 3k 
3300 ==> 3,3k 
3333 ==> 3,333k 
30000 ==> 30k 
300000 ==> 300k 
3000000 ==> 3M 
3000003 ==> 3M 
0,253 ==> 253m 
0,0253 ==> 25,3m 
0,00253 ==> 2,53m 
-0,253003 ==> -253,003m 
संबंधित मुद्दे