我将两个字符串转换为小数:
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#中为十进制类型)被认为是整数,而10.00不是整数。
答案 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}");