ChatGPT解决这个技术问题 Extra ChatGPT

在 C# 中以两位小数舍入双精度数?

我想在 c# 中将 double 值四舍五入到小数点后两位,我该怎么做?

double inputValue = 48.485;

围捕后

inputValue = 48.49;

相关:c# - 如何将十进制值四舍五入到小数点后 2 位(用于在页面上输出)

请注意,您不能使用 double 表示所有浮点值,这可以trip you up when rounding

T
Tim Cooper

这有效:

inputValue = Math.Round(inputValue, 2);

截断浮点数的解决方法: float myTruncFloat = float.Parse(Math.Round(myFloat, 2).ToString());
如果值为 48.0000。它不会产生 48.00。双输入值 = 48.00; inputValue = Math.Round(inputValue, 2);只会产生 48 个结果。有什么warkaound吗?
根据文档,这会将中点数字四舍五入到最接近的偶数 docs.microsoft.com/en-us/dotnet/api/…
@user1926138 48.00 不是有效数字。
n
nandin
Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

这实际上是应该使用的。银行等中的大多数操作都是使用此方法(MidpointRounding.AwayFromZero)完成的。
建议银行使用双打是可怕的家伙,不要使用货币的近似值。
@raggi恐怕有些(银行)会这样做......这可以解释很多东西
是的,我相信这就是电影“办公空间”之后制作的 - 将没有人注意到的几分钱四舍五入。在何时任意使用舍入时要小心。
作为很久以前的一部原创超人电影情节的一部分。
D
Diwas

另一种简单的方法是将 ToString 与参数一起使用。例子:

float d = 54.9700F;    
string s = d.ToString("N2");
Console.WriteLine(s);

结果:

54.97

G
Gage

你应该使用

inputvalue=Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

Math.Round

Math.Round 将双精度浮点值舍入为指定的小数位数。

MidpointRounding

指定数学舍入方法应如何处理介于两个数字之间的数字。

基本上,上面的函数将获取您的 inputvalue 并将其四舍五入到 2(或您指定的任何数字)小数位。使用 MidpointRounding.AwayFromZero,当一个数字位于其他两个数字之间时,它会向 离零最近的数字四舍五入。您还可以使用另一个选项,向 最近的偶数四舍五入号码。


这应该是答案!
r
recursive

使用Math.Round

value = Math.Round(48.485, 2);

打败我(虽然我也会在那里添加一个分号;))
但是,请注意 MidpointRounding:“如果数字小数位右侧的 value 中的第一个数字的值为 5,则数字位置中的数字如果是奇数则向上舍入,如果是偶数则保持不变”
r
reza.cse08

你可以从下面尝试一个。有很多方法可以做到这一点。

1. 
 value=Math.Round(123.4567, 2, MidpointRounding.AwayFromZero) //"123.46"
2.
 inputvalue=Math.Round(123.4567, 2)  //"123.46"
3. 
 String.Format("{0:0.00}", 123.4567);      // "123.46"
4. 
string.Format("{0:F2}", 123.456789);     //123.46
string.Format("{0:F3}", 123.456789);     //123.457
string.Format("{0:F4}", 123.456789);     //123.4568

我使用了第四个选项。写 F6 比写下 6 个零对我更有效;-)
0
0x777

使用插值字符串,这会生成一个向上取整的字符串:

var strlen = 6;
$"{48.485:F2}"

输出

"48.49"

B
Bobby D.

我认为所有这些答案都缺少这个问题。问题在于“向上取整”,而不仅仅是“取整”。我的理解是,四舍五入意味着关于整数的任何小数值都会四舍五入到下一个整数。即:48.0000000 = 48 但 25.00001 = 26。这不是四舍五入的定义吗? (或者我过去 60 年的会计工作是否放错了地方?