2011-08-10 17 views
5

Bazı büyük sayıları bilimsel biçimde biçimlendirmeye çalışıyorum ama üçün katları olarak güce ihtiyacım var. Bunu yapmak için önerilen bir yol var mı?Biçim C# Bilimsel Gösterimi'nin iki katına kadar olan güçlerde çift

Tabloda bir dizi numaram var ve gerçek bilimsel biçim yerine (ondalık noktadan önceki tek rakamlı), üç katına sahip bir güce sahip olmak için bu değişikliğe sahip olduğum için mutluyum. örnek:

3.123e + 003
19.523e + 003

yerine:

3.123e + 003
1.952e + 004

Üçün katları olarak tüm güçlere sahip olmak, masamın taranmasını kolaylaştırır, inanıyorum. peşin

Teşekkür

+1

Bu genellikle "Mühendislik Notasyon" denir ve bu sorunda da tartışılmıştır: http://stackoverflow.com/questions/808104/engineering-notation-in-c. –

+0

Teşekkürler B Pete. Bu yazıyı görmüştüm ama bir mühendis olmadığımdan beri, ünitelerle kafam karışmaya başladım, meslektaşım sadece masadaki ünitelerle değil, üçün katlarını sormuştu. İlginç bir mesaj olsa da, bir seçenek olarak yüzebilirim :) – Marc

+0

Ünite tanımlarını (m, k, ...) kullanıp kullanmasanız da, diğer soruda ele alınan yöntemlerin bazılarının çözülmesinde yararlı olabileceğini düşündüm. Sorduğun gibi sorun. –

cevap

4

Bence kendi işlevi yazmak gerek. İlk başta, sayının bilimsel temsilini, ihtiyacınız olan iki kat daha büyük hassasiyetle elde edebilirsiniz. Ardından kayan nokta katsayısı ve ondalık tür sayısı olarak 10'un güç indeksi elde etmek için sonuç dizesini ayrıştırmalısınız. Bundan sonra bölüm indeksinin kalanını 3 ile analiz eder ve sayıları uygun şekilde değiştirirsiniz. Sonunda çıkış dizesi üretiyorsunuz.

static string Scientific3(double value, int precision) 
{ 
    string fstr1 = "{0:E" + (precision+2).ToString() + "}"; 
    string step1 = string.Format(fstr1, value); 
    int index1 = step1.ToLower().IndexOf('e'); 
    if (index1 < 0 || index1 == step1.Length - 1) 
     throw new Exception(); 
    decimal coeff = Convert.ToDecimal(step1.Substring(0, index1)); 
    int index = Convert.ToInt32(step1.Substring(index1 + 1)); 
    while(index%3!=0) 
    { 
     index--; 
     coeff *= 10; 
    } 
    string fstr2 = "{0:F" + precision.ToString() + "}E{1}{2:D3}"; 
    return string.Format(fstr2, coeff, ((index < 0) ? "-" : "+"), Math.Abs(index)); 
} 
+0

Ah, güzel! Önceden ayrıştırılmış dizeyi analiz etmeyi düşünmemiştim ve onu buradan manipüle etmişti. Bunu bir dönüştürücü içine yazacak ve bir fikir verecektir, fikir ve kod için teşekkürler: D – Marc