2015-12-14 16 views
2

爲了能夠動態地改變我的申請,我將其存儲在RESX文件中的值。當然這是一個字符串。調用的ToString()在一根繩子上改變其格式

MaximumSpend - 5000 

在我的代碼中,我做了int.Parse(MyApp.MaximumSpend)。現在我可以在一個地方更改最大支出,應用程序無需進行任何更改即可處理。

在前端我想表明的價值爲$ 5,000。 如果這是一個int,我會做

MyInt.ToString("0#,##0") 

但它已經是一個字符串。我可以轉換爲int,然後調用.ToString(),但這看起來很浪費。

有沒有在我的前端代碼改變5000至5000的一個更好的方法?或者正在改爲int,並回到最佳狀態?

更新:謝謝大家。我已經完成並完成了int.parse並返回到一個字符串。

$('#MaximumSpend').text("@int.Parse(MyResources.MyNamespace.MaximumSpend).ToString("##,###")"); 

我將使用在未來這在web.config(我已經做了,對於其他項目,只是沒有這些它開始作爲一個純粹的前端東西然後我決定用它在後端)。

我也相應upvoted

+1

我會說任何其他方式,你可以想到的可能不會是值得的麻煩,所以只需轉換爲int和back, –

+1

將值存儲在應用程序中作爲int,並且只有在需要顯示值時才轉換爲(格式化)字符串。 –

+0

基本上:不,沒有更好的方法比它成爲一個整數。當它是一個字符串時,你不能使用數字,解析和修改字符串會比將其轉換爲int並返回字符串更糟糕。理想的做法不是將數據作爲一個字符串放在第一位,但如果這不可能,那麼最好的方法就是來回轉換。 – Jcl

回答

1

簡短的回答是:沒有,有沒有更好的辦法

長的答覆是:

  1. 你可以分析該字符串,並將其轉換,但它可能會是這樣糟糕而不僅僅是轉換爲int,然後回到格式化的字符串。

  2. 您可以直接將值存儲在資源中,而不是字符串。設計人員不允許直接執行此操作,但可以使用文本編輯器打開.resx文件(或在Visual Studio中,右鍵單擊它,Open With並選擇XML Text Editor),然後將資源添加到正確的部分,像這樣:

    <data name="MaximumSpend" xml:space="preserve" type="System.Int32, mscorlib"> 
        <value>5000</value> 
    </data> 
    

    之後,您可以查看它在正常的資源編輯器(你會在Other部分中看到你的價值你甚至可以編輯它,只是沒有「添加更多」。)

或者:

  1. 使用設置文件,而不是資源,這可能對這類數據更有意義
+0

哦,有趣。謝謝。 – VictorySaber

+0

我真的會去#3。 「資源」文件不應該是存儲設置的文件。你在那裏儲存*資源*(我寧願稱他們爲「資產」,但「資源」也是個好名字)。如果你想存儲一個*設置*(這種情況下的最大支出),那麼去正確的工具:使用* settings *文件。 – Jcl

+0

我傾向於同意#3是最好的方式。我使用web.config這樣的其他項目,但這是我添加的第一個項目之一,它只是停留在周圍。 – VictorySaber

3

只是克隆en-US文化(使用$作爲CurrencySymbol),設置它的CurrencyDecimalDigits0The "C" format specifier格式化數克隆文化;

int i = 5000; 
var clone = (CultureInfo)CultureInfo.GetCultureInfo("en-US").Clone(); 
clone.NumberFormat.CurrencyDecimalDigits = 0; 
Console.WriteLine(i.ToString("C", clone)); // $5,000 

編輯:看起來你在第一個地方一個字符串"5000",你需要與int.Parse第一解析它int然後可以使用整數值來產生特定格式的字符串。

int i = int.Parse("5000"); 
... 
... 
+0

@Downvoter至少留心評論,所以我可以看到我可能會錯在哪裏? –

+1

我不是downvoter,但問題表明,傳入的值已經是一個字符串,並且他希望儘可能避免將其轉換回int,然後再次調用'ToString()'。再次,我認爲這是最好的方式,但是OP想要避免的方法是 – Jcl

+1

根據OP的問題:'但它已經是一個字符串。我可以轉換爲一個int然後調用。ToString(),但看起來很浪費。 在我的前端代碼中更改5000到5,000更好嗎?或者正在改變爲一個整數並回到最佳方式?' – Jcl

0

我想從一個int變化,回string也許是最好的辦法。例如:

string strIntString = strMaxSpend.Split("-").Trim(); 
int nValue; 
if (!Int32.TryParse(strIntString, out nValue)) 
{ 
    //Parse failed 
} 

注意我用TryParse,而不是直Convert呼叫櫃面轉換失敗,這樣我們就可以順利失敗。

然後只是做在你的問題中提到的ToString()部分。

3

RESX文件沒有配置文件。它們旨在存儲靜態資源,如本地化的字符串,圖像等。

你可能想要的是一個環境,這是在Visual Studio的性能下降兩個標​​籤。在那裏你可以定義一個應用程序範圍的設置,它被鍵入爲一個int,它將生成一個強類型的訪問器。不需要解析*。

Properties.Settings.Default.MyInt.ToString("0#,##0"); 

以下是關於此主題的更多信息:Using Settings in C#

* 從技術上講,它仍然被解析,但.NET爲你做。

+0

這是更多的評論,而不是問題的實際答案 – TheLethalCoder

+0

他問了一個更好的方法。更好的辦法是完全避免這個問題。 –

+1

我認爲一個更好的鏈接將是[在C#中使用設置](https://msdn.microsoft.com/en-us/library/aa730869.aspx) – sloth

-2

試試這個:

string s = "2342314854"; 
string s1 = string.Format("{0:C}", Double.Parse(s)); 

結果將是:$2,342,314,854.00

這個代碼將努力字符串值轉換爲貨幣。

+0

編號'N'格式說明符不使用_any_貨幣東西, –

+0

我們可以使用C代替N,因此它將以$格式返回結果。 –

+0

@VaibhavChaurasiya取決於'CurrentCulture'。 –