C# 更改小数的精度

C# 更改小数的精度,c#,decimal,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 bS

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

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?(请注意:我指的是小数,而不是输出字符串表示形式。)

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

我的问题的背景是,我想将这些数字传输到第三方数据库中。数据库只接受小数,不接受整数。10(尽管在C#中是decimal类型)被视为整数,而10.00则不是

“如何将
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}");

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

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

如果你想得到“至少N个小数”,你可以使用
Decimal添加一个零值和相关的小数位数

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

有一个类似的标题,但是处理全局更改精度。如何访问您的数据库?考虑到它们是相同的(只是精度不同),向数据库发送十进制(数据类型)应该可以。00只是该类型的精确值,如果您是通过带有参数化的SQL进行存储,则不清楚为什么它不起作用。数据库是通过WSDL web服务访问的。发送到数据库的值肯定是decimal类型。您可以发布相关的WSDL吗?您的XS类型是否指定为decimal?正如@Tom所说的-如果WSDL期望实际的decimal数据类型具有特定的精度,那么它就不可能是正确的。若它需要十进制的字符串表示,那个么在调用WS.I之前,只需相应地格式化它。但这会将精度改变一定数量的小数,而不是一定数量的小数。例如,10.00m*1.00m产生10.0000m。@Michael-您可以使用
Math.Round
将结果四舍五入到特定的小数位数,或者如果您希望“至少N个小数”,请参阅更新。