在C#中将十进制转换为无符号十进制(或字符串?)

时间:2014-06-05 16:24:21

标签: c# type-conversion decimal uint64

我有一个变量DifferenceAmt,这是一个小数。它可以是消极的也可以是积极的。我需要输出DifferenceAmt的值,但如果它是负数则不带负号,作为字符串。我知道如何通过首先检查DifferenceAmt是否小于零来删除负号,然后从第二个字符执行子字符串,如果它是,但这看起来很麻烦。我已尝试首先将DifferenceAmt转换为UInt64,

UInt64 differenceamt = (UInt64)DifferenceAmt;

但是我一直收到一条错误消息,说明该数字对于UInt64来说太大了(例如,即使它是-10,也是如此)。我怎么能这样做?

4 个答案:

答案 0 :(得分:3)

使用Math.Abs(DifferenceAmt).ToString();这将为您提供数字的绝对值并删除负号。

答案 1 :(得分:3)

使用Math.Abs(differenceAmt)获取绝对值。

转换为UInt64无效。您的-10示例超出了UInt64的范围,对于UInt64范围之外的其他Decimal值,它也同样失败。它还必须将值截断为整数。

答案 2 :(得分:3)

有多种方法可以做到这一点。 最简单的方法是使用Math.Abs使用绝对值。

decimal x = -10.53m;
string s = Math.Abs(x).ToString(); // 10.53

另一种方法是将自定义NumberFormatInfo与空NegativeSign一起使用。

decimal x = -10.53m;
string s = x.ToString(new NumberFormatInfo { NegativeSign = string.Empty }); // 10.53

另一种方法是使用自定义格式化程序来表示正/负数。但是在这种情况下你必须指定自定义字符串格式。更多相关信息:The ";" Section Separator

decimal x = -10.53m;
string s = x.ToString("#.##;#.##") // 10.53

答案 3 :(得分:2)

您可以使用:

Math.Abs(differenceAmt).ToString();

看到这个:

http://msdn.microsoft.com/en-us/library/a4ke8e73(v=vs.110).aspx