点后仅保留小数点后两位


73
public void LoadAveragePingTime()
{
    try
    {
        PingReply pingReply = pingClass.Send("logon.chronic-domination.com");
        double AveragePing = (pingReply.RoundtripTime / 1.75);

        label4.Text = (AveragePing.ToString() + "ms");                
    }
    catch (Exception)
    {
        label4.Text = "Server is currently offline.";
    }
}

目前,我的label4.Text get类似于:“ 187.371698712637”。

我需要显示类似“ 187.37”的内容

DOT之后只有两个职位。有人可以帮我吗?


2
仅供参考-我认为您的意思是它应该显示187.3 * 7 *,而不是0.34
Matt Grande

Answers:


161

string.Format 是你的朋友。

String.Format("{0:0.00}", 123.4567);      // "123.46"

再次让我惊讶于这个网站的速度。感谢您的帮助,效果很好!
瑟吉奥·塔皮亚

@Steve,是的,看起来是这样!至少您获得了更多代表:P
Matt Grande

7
是的,这就是为什么您有11k。
MrBoJangles 2011年

5
这会更改小数的类型,如果要使用小数,则需要再次转换回小数。我认为,如果您想保持小数而不进行来回转换,则Math.Round(x,2)是更好的答案。舍去了第3位到第2位也是有道理的,如果它是大于5
周华健

1
是的,这取决于您的需求。在这种情况下,他需要一个字符串,这就是我所显示的。同样,要明确的是,String.Format以相同的方式处理舍入Math.Round
马特·格兰德

59

如果您只想在逗号后取两个数字,则可以使用为您提供舍入功能的数学类,例如:

float value = 92.197354542F;
value = (float)System.Math.Round(value,2);         // value = 92.2;

希望这可以帮助
加油


我有浮动价值。所以我该怎么做 我尝试了上述方法,但是它给出语法错误,无法将类型float转换为double
Rami Far

30
// just two decimal places
String.Format("{0:0.00}", 123.4567);      // "123.46"
String.Format("{0:0.00}", 123.4);         // "123.40"
String.Format("{0:0.00}", 123.0);         // "123.00"

http://www.csharp-examples.net/string-format-double/

编辑

不知道为什么他们使用“字符串”而不是“字符串”,但其余部分是正确的。


字符串与C#中的字符串相同。我不确定为什么这两种语言都有,但是确实如此。
马特·格兰德

使用哪个是一个好问题。如果稍后将字符串映射到更快的String2类,将会发生什么?该类将具有相同的Format方法吗?
Yuriy Faktorovich 09年

4
我认为使用String进行静态函数调用是首选样式
Joe H

@Yuriy-当我们不得不处理更快的String2类时(我们当然希望有一个更好的名称),我们将越过这座桥
Matt Grande

3
.Net具有System.String或简称String。C#具有字符串,它是映射到System.String的本机类型。您可以使用一个代替另一个,但是在编写C#时,没有理由使用非C#名称,即使是在静态语言中也是如此。当然,由于常见的FormatWith扩展方法,对于静态调用是否大写字符串的问题变得无关紧要。
Steven Sudit

7
double amount = 31.245678;
amount = Math.Floor(amount * 100) / 100;

2
通常,如果答案包括对代码意图的解释,以及为什么不引入其他代码就能解决问题的原因,则答案会更有帮助。(此帖子已被至少一个用户标记,大概是因为他们认为应删除无解释的答案。)
Nathan Tuggy 2015年

5

你可以用这个

“ String.Format(” {0:F2}“,字符串值);”

仅给您点之后的两位数字,正好是两位数字。



3

尝试这个:

double result = Math.Round(24.576938593,2);
MessageBox.Show(result.ToString());

输出:24.57


2

或者,您也可以使用复合运算符F,然后指出希望在小数点后出现多少个小数点。

string.Format("{0:F2}", 123.456789);     //123.46
string.Format("{0:F3}", 123.456789);     //123.457
string.Format("{0:F4}", 123.456789);     //123.4568

它将四舍五入,因此请注意。

我获得了常规文档。那里还有大量其他格式设置运算符,您可以检查一下。

来源:https : //msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx


2

使用的属性 String

double value = 123.456789;
String.Format("{0:0.00}", value);

注意:这只能用于显示。

使用 System.Math

double value = 123.456789;
System.Math.Round(value, 2);

1

尝试这个

public static string PreciseDecimalValue(double Value, int DigitsAfterDecimal)
        {
            string PreciseDecimalFormat = "{0:0.0}";

            for (int count = 2; count <= DigitsAfterDecimal; count++)
            {
                PreciseDecimalFormat = PreciseDecimalFormat.Insert(PreciseDecimalFormat.LastIndexOf('}'), "0");
            }
            return String.Format(PreciseDecimalFormat, Value);
        }

1

简单的解决方案:

double totalCost = 123.45678;
totalCost = Convert.ToDouble(String.Format("{0:0.00}", totalCost));

//output: 123.45

1

double doublVal = 123.45678;

有两种方法。

  1. 用于字符串显示:

    String.Format("{0:0.00}", doublVal );
    
  2. 再次获得Double

    doublVal = Convert.ToDouble(String.Format("{0:0.00}", doublVal ));
    

0

使用字符串插值 decimalVar:0.00


也许您可以在问题中添加更多内容,也许您可​​以解释一下为什么可以解决此问题(有关插值的一些背景知识)?
miltonb

而是使用String.Format字符串插值允许更轻松,更直观的字符串格式。
emanuel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.