首先,这不是一个重复的问题,我需要总是有2个精度小数
例如
2应转换为2.00
0应转换为0.00
0.5应转换为0.50
输出数必须是小数
我尝试过的事情
decimal val = 0.5000M decimal d = Math.Round(val, 2);//gives 0.5 i need 0.50
注意:我不打算将十进制转换为字符串,因为我需要将其作为仅接受十进制值的soap请求发送,因此我没有灵活性将其转换为字符串.
由Jakub Lortz回答的以下代码更新工作正常虽然看起来很复杂
Jakub Lortz的解决方案1
decimal twoPoint00 = new Decimal(200, 0, 0, false, 2);
decimal twoPoint0 = new Decimal(20, 0, 0, false, 1);
Console.WriteLine(twoPoint00) // prints 2.00
Console.WriteLine(twoPoint0) // prints 2.0
他给出了非常简单的解决方案,这也将起作用
decimal val = 0.5000M;
string result = string.Format("{0:f2}", val);
decimal d;
Decimal.TryParse(result, out d);
有一个构造函数Decimal
允许您指定比例:
public Decimal( int lo, int mid, int hi, bool isNegative, byte scale )
例如:
decimal twoPoint00 = new Decimal(200, 0, 0, false, 2); decimal twoPoint0 = new Decimal(20, 0, 0, false, 1); Console.WriteLine(twoPoint00) // prints 2.00 Console.WriteLine(twoPoint0) // prints 2.0
C#编译器使用此构造函数从文字创建小数,因此您可以在编译的IL中轻松检查它.
编辑
要将十进制值转换为具有设置精度的表示,首先必须使用Decimal.GetBits
方法来获取其内部表示.然后修改值(可能使用BigInteger
整个96位值作为一个整体?)并创建一个新的小数.
看起来像很多工作,有很多可能的错误.我首先检查Bogdan的答案中提出的解决方案- ToString()
+ Parse()
.它似乎工作正常,非常简单.