【问题标题】:Convert decimal to unsigned decimal (or string?) in C#在 C# 中将十进制转换为无符号十进制(或字符串?)
【发布时间】:2014-07-26 18:04:57
【问题描述】:

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

UInt64 differenceamt = (UInt64)DifferenceAmt;

但我不断收到一条错误消息,指出该数字对于 UInt64 来说太大(例如,即使它是 -10)。我该怎么做?

【问题讨论】:

  • Math.Abs(DifferenceAmt)
  • 完美运行!谢谢乌鲁别克!如果您将此作为答案发布,我会投票赞成。

标签: c# type-conversion decimal uint64


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你可以用这个:

    Math.Abs(differenceAmt).ToString();
    

    看到这个:

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

    【讨论】:

    • 这不是C# 代码...我已经为您完成了您的工作并编辑了帖子。
    • @user3359388 - 在 Brandon 编辑之前它不是有效的代码。大小写很重要!
    • 确实,大写在C#中非常非常重要。
    【解决方案3】:

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

    投射到UInt64 将不起作用。您的 -10 示例超出了UInt64 的范围,对于 UInt64 范围之外的其他Decimal 值,它同样会失败。它还必须将值截断为整数。

    【讨论】:

      【解决方案4】:

      有多种方法可以做到这一点。 最简单的方法是使用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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-22
        • 2016-03-06
        • 1970-01-01
        • 2018-01-31
        • 1970-01-01
        • 1970-01-01
        • 2016-08-09
        • 2015-09-12
        相关资源
        最近更新 更多