【问题标题】:How to remove zero after decimal point in c# [duplicate]如何在c#中删除小数点后的零[重复]
【发布时间】:2017-09-22 01:35:40
【问题描述】:

c# 中是否有任何数学函数?

如果值为 18.00,那么我想要值为 18, 如果值为 18.50,那么我想要值为 18.5, 如果值为 18.25000,那么我想要值为 18.25。

【问题讨论】:

  • 你是在说十进制转字符串吗?
  • 我认为这就是您要寻找的答案:stackoverflow.com/questions/4525854/remove-trailing-zeros
  • 不,我不想转换成字符串。我想要十进制值,但小数点后没有 0。
  • @IvanChepikov:Java?
  • 18、18.00 和 18.00000000 都是完全相同的值,只是转换为字符串时表示方式不同。这么说,你的问题没有意义。添加更多上下文/代码以显示您的实际问题。

标签: c#


【解决方案1】:

您可以使用 Decimal.Round 文档在这里

Deciaml.Round Documentation

【讨论】:

    【解决方案2】:

    如果你想转换成十进制只用这个

    static decimal? RemoveTrailingZeros(this decimal? value)
    {
        if (value == null) return null;
    
        var format = $"0.{string.Join(string.Empty, Enumerable.Repeat("#", 29))}";
        var strvalue = value.Value.ToString(format);
        return ConvertToDecimalCultureInvariant(strvalue);
    }
    
    static decimal? ConvertToDecimalCultureInvariant(this string value)
    {
        decimal decValue;
    
        if (!decimal.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out decValue))
        {
            return null;
        }
        return decValue;
    }
    

    由于小数的精度为 29,因此 Enumerable.Repeat("#", 29)

    并将其用作

    var result = RemoveTrailingZeros(29.0000m);
    

    【讨论】:

    • @downvoter:解释一下。
    猜你喜欢
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 2021-06-20
    • 2019-09-13
    • 2014-10-21
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    相关资源
    最近更新 更多