回答
我提供樣品碼。請儘量使它在你的方式
private static string ToEngineeringNotation(this double d)
{
double exponent = Math.Log10(Math.Abs(d));
if (Math.Abs(d) >= 1)
{
switch ((int)Math.Floor(exponent))
{
case 0: case 1: case 2:
return d.ToString();
case 3: case 4: case 5:
return (d/1e3).ToString() + "k";
case 6: case 7: case 8:
return (d/1e6).ToString() + "M";
case 9: case 10: case 11:
return (d/1e9).ToString() + "G";
case 12: case 13: case 14:
return (d/1e12).ToString() + "T";
case 15: case 16: case 17:
return (d/1e15).ToString() + "P";
case 18: case 19: case 20:
return (d/1e18).ToString() + "E";
case 21: case 22: case 23:
return (d/1e21).ToString() + "Z";
default:
return (d/1e24).ToString() + "Y";
}
}
else if (Math.Abs(d) > 0)
{
switch ((int)Math.Floor(exponent))
{
case -1: case -2: case -3:
return (d * 1e3).ToString() + "m";
case -4: case -5: case -6:
return (d * 1e6).ToString() + "μ";
case -7: case -8: case -9:
return (d * 1e9).ToString() + "n";
case -10: case -11: case -12:
return (d * 1e12).ToString() + "p";
case -13: case -14: case -15:
return (d * 1e15).ToString() + "f";
case -16: case -17: case -18:
return (d * 1e15).ToString() + "a";
case -19: case -20: case -21:
return (d * 1e15).ToString() + "z";
default:
return (d * 1e15).ToString() + "y";
}
}
else
{
return "0";
}
}
不,我不相信有一個格式字符串,會爲你做的。
您可能會發現第三方庫來做到這一點,並且我知道有內置的Win32例程來將文件大小轉換爲類似的表示形式,但是可以使用1024而不是1000作爲「基地「的K/M /等。 This Stack Overflow answer顯示了一些C#代碼,但我確定平臺中也有一些東西......正如我所說的那樣,這是針對文件大小的,這可能是也可能不是你想要的。
我爲你寫了這個。
string onem = intToSimple(1000000);
string onek = intToSimple(1000);
private string intToSimple(int number)
{
if(val > 1000000000000)
return (val/1000000000000).ToString("0.00") + "tr";
else if(val > 1000000000)
return (val/1000000000).ToString("0.00") + "b";
else if(val > 1000000)
return (val/1000000).ToString("0.00") + "m";
else if(val > 1000)
return (val/1000).ToString("0.00") + "k";
else
return value.ToString("0.00");
}
我忘了複製每個分割,但現在修復它。 – 2011-04-11 06:19:26
您還需要提及一個小於1的數字。請參閱下面的答案 – Marshal 2011-04-11 06:21:02
感謝 - 「val」,「value」和「number」的混合和匹配,但這樣做的竅門。 – 2013-02-20 19:18:01
你將不能夠做到這一點使用的String.Format,但你可以試試這個:
int i = 2400;
string j = i/1000.0 + "k";
Console.WriteLine(j);
這隻能處理一個案例。他顯然想要處理幾乎所有可能的案例。 – 2011-04-11 13:31:40
您也可以嘗試以下方法:
轉換你的電話號碼轉換爲字符串科學格式:2400 - > 2.4e + 003; 2,6000,000→2.6e + 006
然後用所需的SI前綴代替指數(例如e + 003→k,e + 006→M,e-009→n)
我創建了以下擴展用於此目的:
using System;
using System.Globalization;
/// <summary>
/// Si prefixed string conversion class
/// </summary>
public static class SIPrefixedString
{
/// <summary>
/// converts the value into a string with SI prefix
/// </summary>
/// <param name="value">The value.</param>
/// <returns>si prefixed string</returns>
public static string ToSIPrefixedString(this double value)
{
string stringValue = value.ToString("#E+00", CultureInfo.InvariantCulture);
string[] stringValueParts = stringValue.Split("E".ToCharArray());
int mantissa = Convert.ToInt32(stringValueParts[0], CultureInfo.InvariantCulture);
int exponent = Convert.ToInt32(stringValueParts[1], CultureInfo.InvariantCulture);
while (exponent % 3 != 0)
{
mantissa *= 10;
exponent -= 1;
}
string prefixedValue = mantissa.ToString(CultureInfo.InvariantCulture);
switch (exponent)
{
case 24:
prefixedValue += "Y";
break;
case 21:
prefixedValue += "Z";
break;
case 18:
prefixedValue += "E";
break;
case 15:
prefixedValue += "P";
break;
case 12:
prefixedValue += "T";
break;
case 9:
prefixedValue += "G";
break;
case 6:
prefixedValue += "M";
break;
case 3:
prefixedValue += "k";
break;
case 0:
break;
case -3:
prefixedValue += "m";
break;
case -6:
prefixedValue += "u";
break;
case -9:
prefixedValue += "n";
break;
case -12:
prefixedValue += "p";
break;
case -15:
prefixedValue += "f";
break;
case -18:
prefixedValue += "a";
break;
case -21:
prefixedValue += "z";
break;
case -24:
prefixedValue += "y";
break;
default:
prefixedValue = "invalid";
break;
}
return prefixedValue;
}
/// <summary>
/// returns the double value for the si prefixed string
/// </summary>
/// <param name="prefixedValue">The prefixed value.</param>
/// <returns>double value</returns>
public static double FromSIPrefixedString(this string prefixedValue)
{
string scientificNotationValue = prefixedValue;
if (scientificNotationValue.Contains("E+") == false && scientificNotationValue.Contains("E-") == false)
{
scientificNotationValue = scientificNotationValue
.Replace("Y", "E+24")
.Replace("Z", "E+21")
.Replace("E", "E+18")
.Replace("P", "E+15")
.Replace("T", "E+12")
.Replace("G", "E+09")
.Replace("M", "E+06")
.Replace("k", "E+03")
.Replace("m", "E-03")
.Replace("u", "E-06")
.Replace("n", "E-09")
.Replace("p", "E-12")
.Replace("f", "E-15")
.Replace("a", "E-18")
.Replace("z", "E-21")
.Replace("y", "E-24");
}
return Convert.ToDouble(scientificNotationValue, CultureInfo.InvariantCulture);
}
我覺得你的問題是一般的,反正我後你對某些情況下一個簡單的答案:
private string Cnv(int num)
{
double DIV=1000f;
double f = num;
if (f<DIV) return num.ToString();
f = num/DIV;
if (f < DIV) return f.ToString("0.0k");
f = num/DIV;
if (f < DIV) return f.ToString("0.0m");
return (f/DIV).ToString("0.0g");
}
這是正確的一個在擴展形式。
public static string ToSimpleK(this int val)
{
if (val > 1000000000)
return ((decimal)val/1000000000).ToString("0.00") + "b";
else if (val > 1000000)
return ((decimal)val/1000000).ToString("0.00") + "m";
else if (val > 1000)
return ((decimal)val/1000).ToString("0.00") + "k";
else
return val.ToString();
}
- 1. 最長執行時間fastcgi_read_timeout 2400的max_execution_time = 2400和max_input_time設置= 2400
- 2. String.format()
- 3. ExceptionInInitializerError,使用從的String.format
- 4. 掃描儀後,2400個字符
- 5. 在StringBuilder中添加String.Format時獲取「Object Reference Error」
- 6. string.format conundrum
- 7. C# - String.Format()
- 8. string.format error
- 9. 如何從原始文件讀取並在String.format中使用
- 10. 如何獲得的String.Format不解析{0}
- 11. String.Format針對string.Format。任何問題?
- 12. String.Format的反轉?
- 13. string.Format在JS
- 14. string.Format忽略NumberFormatInfo?
- 15. vb.net的String.Format
- 16. 的String.Format VS + C#
- 17. Math.Round與String.Format
- 18. String.Format中的FormatException
- 19. F#的String.format
- 20. String.format with lazy evaluation
- 21. 的String.Format在VB
- 22. IndexOutOfRange Exception from String.Format
- 23. Lua string.format選項
- 24. String.Format(...)貨幣
- 25. String.Format問題
- 26. 使用的String.format
- 27. string.Format()空白零
- 28. 的String.Format問題
- 29. String.Format和SqlParameters
- 30. 的String.Format問題
想知道怎麼做,這樣,喬恩斯基特289K – V4Vendetta 2011-04-11 06:20:17
@ V4Vendetta:我會想象他們寫了類似於我掛了答案代碼中的一些代碼。 – 2011-04-11 07:27:05
@ V4Vendetta,你錯了。它的671k現在大聲笑 – 2014-05-04 09:38:48