2012-03-29 96 views
1

我試圖做的非常相似,this c# docs example東西:數字格式在C#中 - 獨立的int和小數部分

int value = 123; 
Console.WriteLine(value.ToString(@"\#\#\# ##0 dollars and \0\0 cents \#\#\#")); 
// Displays ### 123 dollars and 00 cents ### 

除了我希望它實際上帶有小數工作:

double value = 123.095; 
Console.WriteLine(value.ToString(@"\#\#\# ##0 dollars and 0000 \#\#\#")); 
// Should display ### 123 dollars and 0950 ###, but it doesn't (of course) 

嘗試:

Console.WriteLine(value.ToString(@"\#\#\# ##0. dollars and 0000 cents \#\#\#")); 

但打印小數點分隔符(當然),我不想。
我知道我可以做這樣的事情:

String.Format("{0:##0} {1:0000}", 123, 123); 

但非常希望避免除非在.NET中使用複合格式不能達到正確的分離沒有其他辦法

+7

'int值= 123.123,'你真的不這樣做:) – Reniuz 2012-03-29 13:24:19

+1

@Reniuz錯誤的複製/粘貼,很明顯。 – Razor 2012-03-29 13:35:28

+1

123.095是$ 123.00美元,取決於你如何確定'09.5'美分和'10.00'美分之間的值......根據評論它肯定不是'0950'美分。由於必須修正的錯誤數量,我仍然不得不放棄這個問題。 – 2012-03-29 13:52:07

回答

2

可以定義您自己的特殊貨幣格式,但...我不知道我是否會這樣做。它種好像NumberFormatInfo對象的濫用:

編輯:改變數據類型的十進制值翻倍

// works with either decimal or double 
double value = 123.095; 

var mySpecialCurrencyFormat = new System.Globalization.NumberFormatInfo(); 

mySpecialCurrencyFormat.CurrencyPositivePattern = 3; 
mySpecialCurrencyFormat.CurrencyNegativePattern = 8; 
mySpecialCurrencyFormat.NegativeSign = "-"; 
mySpecialCurrencyFormat.CurrencySymbol = "cents"; 
mySpecialCurrencyFormat.CurrencyDecimalDigits = 4; 
mySpecialCurrencyFormat.CurrencyDecimalSeparator = " dollars and "; 
mySpecialCurrencyFormat.CurrencyGroupSeparator = ","; 
mySpecialCurrencyFormat.CurrencyGroupSizes = new[] { 3 }; 


Console.WriteLine(value.ToString("C", mySpecialCurrencyFormat)); 

輸出爲「123美元和0950美分」

編輯:它可能更有意義的是使用CurrencyNegativePattern 15而不是8,這樣負值將導致整個字符串被括號包圍,這可能不會使混淆,而只是將負號放在美元前面。例如,使用CurrencyNegativePattern = 15會導致-123.095輸出爲「(123美元和0950美分)」

+0

我不認爲這是正確的,因爲它只有9.5美分而不是950美分。但我喜歡濫用數字格式化程序。 – user7116 2012-03-29 14:15:49

+0

@sixlettervariables - :)感謝您指出有關0950美分...即使這是OP要求的,它似乎很奇怪。 – 2012-03-29 14:28:58

+0

如果OP想要做一些輸出「123美元和09.50美分」的東西,那麼我認爲這個答案會打破,因爲我沒有看到任何方式使用NumberFormatInfo爲數字的小數部分提供「分組」。 – 2012-03-29 14:38:38

1

。你必須在零件上自己分開:

decimal value = 123.23m; 

Console.WriteLine(
    @"{0:0} dollars and {1:#0} cents", 
    Math.Truncate(value),     // Dollars 
    (value - Math.Truncate(value)) * 100m // Cents 
); 

// Output: 123 dollars and 23 cents 

順便說一句,你不應該使用floatdouble存儲的錢,除非你想IEEE-754舍入模式,以竊取您的金錢或導致你欠更多。

+0

這似乎是對作者問題的唯一正確答案。 – 2012-03-29 13:53:51

+0

在我的情況下不能使用小數。慚愧,我不能使用複合格式,要麼 - 謝謝。 – Razor 2012-03-29 14:05:25

+0

小心負面的價值 – 2012-03-29 14:12:03

0

編寫一個程序,用戶輸入一個實數(如12.842),然後輸出整數部分和小數部分同時使用類型轉換來執行所需的操作。 輸出看起來是這樣的: 整數部分是:12 小數部分:842