4 回答

TA貢獻1813條經驗 獲得超2個贊
首先,這不是一個decimal
,而是一個double
。0.000278121m, 0.000078125m
如果你想要decimal
s,請使用。
要強制使用沒有指數的全長字符串表示形式,請使用.ToString("0.#################")
double。使用小數,默認情況下會這樣做,.ToString()
因為您可以正常工作。

TA貢獻1804條經驗 獲得超7個贊
如果您有不同的對象集合,請區別對待每種類型:
var outStrings = new List<string>();
object[] oo = { 0.000278121, 0.000078125, "Hello World" };
foreach (var ooItem in oo) {
if (ooItem is double dOo) {
outStrings.Add(dOo.ToString("0.#################"));
} else {
outStrings.Add(ooItem.ToString());
}
}
如果您有許多要單獨處理的類型,請使用模式匹配switch語句

TA貢獻1810條經驗 獲得超5個贊
我相信你可以使用 double.ToString(string) 方法。請參閱: https ://docs.microsoft.com/en-us/dotnet/api/system.double.tostring?view=netframework-4.7.2#System_Double_ToString_System_String_
該參數可以是自定義數字格式字符串 ( https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings ) 或標準數字格式字符串 ( https:// docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings?view=netframework-4.7.2#NFormatString)。
“N”格式說明符的精度說明符應在 0 到 99 之間(N0 ~ N99),否則 ToString 方法將返回作為參數傳遞的字符串。你可以這樣做double.ToString("N99"),它將以最高精度返回數字形式的字符串。這樣做的問題是,如果您這樣做0.000078125.ToString("N99"),輸出將有很多尾隨 0,例如:0.0000781250000000000...。
為了克服這個問題,您可以使用 string.TrimEnd(char) 方法。0.000078125.ToString("N99").TrimEnd('0') 將修剪尾隨零,因此輸出可以是 0.000078125。
在給定的示例代碼中,這可以應用為:
//Avoid boxing - specify types whenever possible, or use generic
double[] oo = {0.000278121, 0.000078125};
string[] ss = oo.Select(x => x.ToString("N99").TrimEnd('0')).ToArray();
Console.WriteLine(string.Join("|",ss)); // 0.000278121|0.000078125
編輯:我應該更仔細地閱讀問題,更改類型oo不適合您的情況。但是,總體思路是一樣的;將對象轉換為雙精度,使用具有適當精度的 ToString(string) 方法,然后修剪尾隨零。
您可以通過執行來檢查對象的類型是否為雙精度,此外,通過(模式匹配)obj is double將其轉換回雙精度。obj is double dbl
編輯2:
public static IEnumerable<string> AllToString(IEnumerable<object> objArray)
{
foreach (object obj in objArray)
{
switch (obj)
{
case double dbl:
yield return dbl.ToString("N99").TrimEnd('0');
break;
case bool b:
yield return b.ToString();
break;
case int i:
yield return i.ToString();
break;
case short s:
yield return s.ToString();
break;
case string str:
yield return str;
break;
case float flt:
yield return flt.ToString("N99").TrimEnd('0');
break;
case decimal dcm:
yield return dcm.ToString("N99").TrimEnd('0');
break;
case byte bt:
yield return bt.ToString();
break;
case char ch:
yield return ch.ToString();
break;
case uint ui:
yield return ui.ToString();
break;
case ushort us:
yield return us.ToString();
break;
case sbyte sb:
yield return sb.ToString();
break;
case long ln:
yield return ln.ToString();
break;
case ulong uln:
yield return uln.ToString();
break;
case null:
yield return null; //new string()?
break;
case DateTime dt:
yield return dt.ToString();
break;
case TimeSpan ts:
yield return ts.ToString();
break;
default: //Fallback
yield return obj.ToString();
break;
}
}
}
將對象數組傳遞給方法,然后根據需要調用 .ToArray() 或 .ToList()。這會將對象數組/列表中的每個項目轉換為字符串集合。

TA貢獻2065條經驗 獲得超14個贊
而不是下面的行:
string[] ss = oo.Select(x => x.ToString()).ToArray();
您可以使用下面的代碼行:
我假設 10 是您在輸入集中可以擁有的最大十進制位數。如果有更多,則將 N10 更改為其他數字。
string[] ss = oo.Select(x => ((double)x).ToString("N10")).ToArray();
- 4 回答
- 0 關注
- 221 瀏覽
添加回答
舉報