我嘗試了一切,但無法將非常長的十進制值(指數)轉換爲小數點後6位的負值。C#四捨五入負指數雙值
string str = "-1.7976931348623157E+308";
double d = double.Parse(str);
d = Math.Round(d, 6, MidpointRounding.AwayFromZero);
string str2 = d.ToString();
我想要結果爲-1.797693,就這麼簡單!
我嘗試了一切,但無法將非常長的十進制值(指數)轉換爲小數點後6位的負值。C#四捨五入負指數雙值
string str = "-1.7976931348623157E+308";
double d = double.Parse(str);
d = Math.Round(d, 6, MidpointRounding.AwayFromZero);
string str2 = d.ToString();
我想要結果爲-1.797693,就這麼簡單!
請注意,正如LittleBobbyTables所建議的那樣,1.xxE+308
將不會轉爲1.xx
。但是,假設你不是那個意思,你只是試圖構建你的輸出:
string str2 = d.ToString("E6");
凡E6
數是你想要的E符號之前顯示的數字量。
對於上述示例,str2
將具有值"-1.797693E+308"
。
如果你確實需要你的價值四捨五入(我不確定爲什麼你會 - 爲什麼扔掉精度?這不會妨礙你),你應該保持你的Round
電話,因爲它站在上面。
你這個代碼,我寫信給輪的基礎上significant digits數:
/// <summary>
/// Format a number with scientific exponents and specified sigificant digits.
/// </summary>
/// <param name="x">The value to format</param>
/// <param name="significant_digits">The number of siginicant digits to show</param>
/// <returns>The fomratted string</returns>
public static string Sci(this double x, int significant_digits)
{
//Check for special numbers and non-numbers
if (double.IsInfinity(x)||double.IsNaN(x)||x==0)
{
return x.ToString();
}
// extract sign so we deal with positive numbers only
int sign=Math.Sign(x);
x=Math.Abs(x);
// get scientific exponent, 10^3, 10^6, ...
int sci=(int)Math.Floor(Math.Log(x, 10)/3)*3;
// scale number to exponent found
x=x*Math.Pow(10, -sci);
// find number of digits to the left of the decimal
int dg=(int)Math.Floor(Math.Log(x, 10))+1;
// adjust decimals to display
int decimals=Math.Min(significant_digits-dg, 15);
// format for the decimals
string fmt=new string('0', decimals);
if (sci==0)
{
//no exponent
return string.Format("{0}{1:0."+fmt+"}",
sign<0?"-":string.Empty,
Math.Round(x, decimals));
}
int index=sci/3+6;
// with 10^exp format
return string.Format("{0}{1:0."+fmt+"}e{2}",
sign<0?"-":string.Empty,
Math.Round(x, decimals),
sci);
}
這樣Debug.WriteLine((-1.7976931348623157E+308).Sci(7));
產生-179.7693e306
你明白' 「-1.7976931348623157E + 308」''是用-1.797693'在它前面307零,是正確的?你如何看待四捨五入到-1.797693? – LittleBobbyTables 2014-11-04 20:10:52
C#有一個十進制值,您應該使用它。如果你只是想將其格式化爲輸出,你可以使用d.ToString(「#。######」); – 2014-11-04 20:18:29
@LittleBobbyTables - 是的,我明白。讓我簡單地回答這個問題 - 我的要求說價值應該顯示爲-1.797693。感謝您的迴應。 – Eyedia 2014-11-05 21:58:15