如何在 c# 中舍入浮点数

本文关键字:舍入 浮点数 | 更新日期: 2023-09-27 17:57:24

我想得到数字,哪个.ToString() 转换总长度 <= 7。例如

 1. 1.23456789     - > 1.23457 
 2. 12345.789      - > 12345.8
 3. 123456789.1234 - > 1.235E8
 4. 0.00001234 - > 1.23E-8

我想使用非常快速的解决方案,因为使用大文件。

这段代码可以解决这个问题的一部分,但它不起作用

                    int power = (int)Math.Log10(f) + 1;
                    f = f / (float)Math.Pow(10, power);
                    f = (float)Math.Round(f, 5);
                    f = f * (float)Math.Pow(10, power);

例如 f = 7.174593E+10四舍五入后它变得0.71746(对我来说很好)

当我将其乘以10^11时,它就变成了7.17459948E+10

但我期待7.71746E+10

上。结果我想得到字符串,而不是数字。

如何在 c# 中舍入浮点数

如果要舍入以便以后在计算中使用它,请使用 Math.Round((十进制)myDouble, 3)。

如果您不打算在计算中使用它,但需要显示它,请使用 double。ToString("F3")。

如果您要使用它只是将其显示为字符串(如更新中所述),请使用 String.format() .

//one of these should output it correctly the other uses the wrong character as
//decimal seperator (depends on globalization settings)
String.format("{0:0,00000}",f);//comma for decimal
String.format("{0:0.00000}",f);//point for decimal
//how it works: first you say {0} meaning first variable after the text " "
//then you specify the notation :0,00000 meaning 1 number before the seperator at least
// and 5 numbers after.

f = 0,123456789
String.format("Text before the number {0:0.00000} Text after the number",f);
//output:
//Text before the number 0,12345 Text after the number
//input: 123456789.1234
textBox2.Text = string.Format("{0:0,0##E0}", f); 
//output: 1.235E5