簡體   English   中英

String.Format - 從C ++轉移到C#

[英]String.Format - moving from C++ to C#

我們正在將代碼從C ++升級到C#,而且很多地方我們正在編寫字符串。 例如,我們有類似的東西:

OurString.Format("amount = %0.2Lf", (long double)amount);

如何將%0.2Lf轉換為C#格式? 我嘗試了下面的代碼,但它不一樣

string formatString = String.Format("amount = {0}", (long double)amount));

謝謝

使用格式字符串: http//msdn.microsoft.com/en-us/library/dwhawy9k.aspx

您可能需要N2F2 ,具體取決於是否包含千位分隔符。 所以,

string formatString = String.Format("amount = {0:F2}", amount);

編輯:

作為一個簡單的FYI,如果你在一系列不同的步驟中構造一個字符串,你可能想要使用StringBuilder類,它有一個AppendFormat()方法,它接受與string.Format()相同的格式化選項:

var builder = new StringBuilder();

// ... Your code to build the first part of the string

builder.AppendFormat("amount = {0:F2}", amount);

// ... whatever else you need to add

builder.ToString(); // outputs your final/completed string.

是否使用StringBuilder取決於應用程序對內存管理和/或性能的重要程度; C#中的字符串是不可變的,所以當你連接它們時,你實際上是在創建一個全新的字符串。 你可以在這里閱讀更多內容: http//msdn.microsoft.com/en-us/library/system.string.aspx#Immutability

正如Tieson所寫, F2 ......請記住,在C語言中,默認語言環境是C語言環境。 所以例如0.00 ,而在C#中,默認語言環境是用戶的當前語言環境(這里是意大利語0,00 )。 所以最好這樣做:

string formatString = String.Format(CultureInfo.InvariantLocale, 
                                    "amount = {0:F2}", amount);

如果您希望始終以相同的方式格式化您的數字。 請記住,當我告訴“在意大利這里”也意味着“如果我在美國使用我的意大利Windows 8,我的默認語言環境將是意大利語。”

啊......並且在C#中沒有long double (或者在.NET中,或者在VC ++的新版本中出於這個原因)。 只有double

我要補充一點,使用double (或long double )換錢本身就是反模式......它有十進制類型。

十進制值類型表示十進制數,范圍從正數79,228,162,514,264,337,593,543,950,335到負數79,228,162,514,264,337,593,543,950,335。 Decimal值類型適用於需要大量有效積分和小數位且沒有舍入誤差的財務計算。 Decimal類型不會消除舍入的需要。 相反,它最大限度地減少了因舍入而導致的錯誤。 例如,以下代碼生成的結果為0.9999999999999999999999999999而不是1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM