2010-04-02 50 views
2

我需要发送负数myDecimalValue.ToString(“C”);问题是如果myDecimalValue是负数,可以说-39,转换后我得到$ 39.00作为字符串不是$ 39.00。所以我不知道如何去做这件事。将负小数转换为字符串丢失 -

这是采用小数的实用方法。如果小数点为负,我想的ToString表现出负

public static BasicAmountType CreateBasicAmount(string amount, CurrencyCodeType currencyType) 
    { 
     BasicAmountType basicAmount = new BasicAmountType 
              { 
               currencyID = currencyType, 
               Value = amount 
              }; 
     return basicAmount; 
    } 

我可能会有两种方式,C或F2,我才不管是关于让那个负号intothe字符串,如果传入的十进制为负。我想没有办法做到这一点,除非我在我的实用方法里面检查否定性。我不能只发送一个负数,并希望ToString能够正常工作,并且ToSTring能自动看到小数点是否为负数?

+2

*我得到$ 39.00作为字符串不是$ 39.00。* - 所以禅宗。 – kennytm 2010-04-02 21:00:47

+0

什么?我不明白你的意思。 – PositiveGuy 2010-04-02 21:09:32

+2

他指的是在你的问题中,预期的结果与你得到的结果相同(39.00美元而不是39.00美元);当你可能意思是“... 39.00美元作为字符串不是$ -39.00”。 – JYelton 2010-04-02 21:18:24

回答

5

你可以试试这个:

decimal myDecimalValue = -39m; 
string s = String.Format("${0:0.00}", myDecimalValue); // $-39.00 

然而,SLaks是正确的,负值通常在括号中。

+0

这就是我所要做的,就这么简单。 – PositiveGuy 2010-04-04 18:49:38

2

负值代表圆括号,而不是减号:($39.00)

这是由您通过ToStringCultureInfoNumberFormatInfo控制的。

+1

我更新了原文。 – PositiveGuy 2010-04-02 21:14:49

+1

您可以在财务中看到括号,但是Joe Sixpack在网络上没有看到。想象一下网上购买的折扣。 – 2010-04-02 21:19:37

8

这应该为你工作:

decimal num = -39M; 
NumberFormatInfo currencyFormat = new CultureInfo(CultureInfo.CurrentCulture.ToString()).NumberFormat; 
currencyFormat.CurrencyNegativePattern = 1; 
Console.WriteLine(String.Format(currencyFormat, "{0:c}", num)); // -$39.00 
+0

好神!这就是你使用NumberFormatInfo的方式。这太疯狂了! jYelton的解决方案怎么样,简单得多...? – PositiveGuy 2010-04-02 21:20:45

+0

如果你总是要显示美元,JYelton's很好。可能是这种情况。 – 2010-04-02 21:31:13

1

"Standard Numeric Format Strings"

...为InvariantInfo的默认值为0, 代表 “($ N)”,其中 “$”是 CurrencySymbol和n是一个数字。

所以可以调用的ToString(的IFormatProvider)代替的ToString(),传递的NumberFormatInfo在其上设置CurrencyNegativePattern = 1;

 decimal d = -39M; 
    NumberFormatInfo nfi = new NumberFormatInfo(); 
    nfi.CurrencySymbol = "$"; // didn't default to "$" for me. 
    nfi.CurrencyNegativePattern = 1; 
    string s = d.ToString("C", nfi); // -$39.00 
+0

@Forgotten通过在创建NumberFormatInfo时考虑当前文化,提供了一种更健壮,更有礼貌的方式。我只是蛮力而已。 – JeffH 2010-04-02 21:27:53

+0

CurrencySymbol没有默认为'$',因为NumberFormatInfo需要一个CultureInfo。 (同时发表评论,JeffH。尽管我喜欢你的链接)。 – 2010-04-02 21:29:06

+0

你说得对。我应该说的是,NumberFormatInfo通常是从一个实例CultureInfo(如CultureInfo.CurrentCulture)中收集到的。 – 2010-04-02 21:40:14