更改小数位数的精度

时间:2019-08-26 17:25:59

标签: c# decimal

我将两个字符串转换为小数:

using System;

class MainClass {
    public static void Main (string[] args) {
        string aString = "10";
        decimal aDecimal = System.Convert.ToDecimal(aString);
        Console.WriteLine((decimal)aDecimal);

        string bString = "10.00";
        decimal bDecimal = System.Convert.ToDecimal(bString);
        Console.WriteLine((decimal)bDecimal);
    }
}

第一个输出为10,第二个为10.00。

如何将aDecimal更改为10.00,如何将bDecimal更改为10? (请注意:我指的是小数,而不是输出字符串表示形式。)

对于bDecimalMath.Round(bDecimal,0)有效;这可能是一个很好的解决方案。对于aDecimalaDecimal = aDecimal + 0.01m - 0.01m有效;在大多数情况下,这可能是一个不错的解决方法,但不是真正的解决方案。

我的问题背景是我想将数字转移到第三方数据库中。数据库仅接受小数,但不接受整数。 10(尽管在C#中为十进制类型)被认为是整数,而10.00不是整数。

2 个答案:

答案 0 :(得分:2)

十进制数据类型存储其精度,您可以更改精度而无需使用算术转换为字符串,例如:

decimal d = 10M;
decimal d00 = d * 1.00M;
Console.WriteLine(d00); // 10.00

另请参阅Adjusting decimal precision, .net

如果您想获得“至少N个小数”,则可以使用Decimal.Add,例如,加上

,将零值和相应的小数位数相加。
decimal d0 = 10m;
decimal d1 = 10.0m;
decimal d2 = 10.00m;
decimal d3 = 10.000m;

Console.WriteLine(Decimal.Add(d0, 0.00m)); // 0.00
Console.WriteLine(Decimal.Add(d1, 0.00m)); // 0.00
Console.WriteLine(Decimal.Add(d2, 0.00m)); // 0.00
Console.WriteLine(Decimal.Add(d3, 0.00m)); // 0.000

答案 1 :(得分:1)

  

“如何将aDecimal更改为10.00,如何将bDecimal更改为10?”

我不确定这是否正是您要查找的内容,但是在使用格式字符串格式化精度后,您始终可以使用decimal.Parse重新分配数字:

decimal aDecimal = 10m;
decimal bDecimal = 10.00m;

// Convert them to each other's values using a format string and `decimal.Parse`:
aDecimal = decimal.Parse($"{aDecimal:0.00}");
bDecimal = decimal.Parse($"{bDecimal:0}");