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个小数”,请参阅更新。