当前位置:  开发笔记 > 编程语言 > 正文

十进制舍入到2精度,使X转换为X.00 C#

如何解决《十进制舍入到2精度,使X转换为X.00C#》经验,为你挑选了1个好方法。

首先,这不是一个重复的问题,我需要总是有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

博格丹的解决方案2

他给出了非常简单的解决方案,这也将起作用
decimal val = 0.5000M;
string result = string.Format("{0:f2}", val); decimal d; Decimal.TryParse(result, out d);



1> Jakub Lortz..:

有一个构造函数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().它似乎工作正常,非常简单.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有