亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C#:如何將十進制轉換為字符串而不轉換為指數表示

C#:如何將十進制轉換為字符串而不轉換為指數表示

C#
暮色呼如 2022-07-23 17:58:31
例如,我有一個包含一些值的對象數組。它可以是十進制、雙精度、整數或字符串。 object[] oo = {0.000278121, 0.000078125m, "Hello",1}; 例如,當將此值轉換為字符串時,第二個值變為 7.8125E-05。但是第一個值保持在數組中。那么如何區分這些類型的解析邏輯,并以相同的格式解析所有十進制值呢?完整代碼:object[] oo = {0.000278121, 0.000078125,"Hello",1};string[] ss = oo.Select(x => x.ToString()).ToArray();Console.WriteLine(string.Join("|",ss)); // 0.000278121|7.8125E-05
查看完整描述

4 回答

?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

首先,這不是一個decimal,而是一個double。0.000278121m, 0.000078125m如果你想要decimals,請使用。

要強制使用沒有指數的全長字符串表示形式,請使用.ToString("0.#################")double。使用小數,默認情況下會這樣做,.ToString()因為您可以正常工作。


查看完整回答
反對 回復 2022-07-23
?
三國紛爭

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語句


查看完整回答
反對 回復 2022-07-23
?
森欄

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()。這會將對象數組/列表中的每個項目轉換為字符串集合。


查看完整回答
反對 回復 2022-07-23
?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

而不是下面的行:

string[] ss = oo.Select(x => x.ToString()).ToArray();

您可以使用下面的代碼行:

我假設 10 是您在輸入集中可以擁有的最大十進制位數。如果有更多,則將 N10 更改為其他數字。

string[] ss = oo.Select(x => ((double)x).ToString("N10")).ToArray();


查看完整回答
反對 回復 2022-07-23
  • 4 回答
  • 0 關注
  • 221 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號