double 在 C# 中显示 2 个非零小数? [复制]

Posted

技术标签:

【中文标题】double 在 C# 中显示 2 个非零小数? [复制]【英文标题】:double shows 2 non-zero decimal in C#? [duplicate] 【发布时间】:2016-09-27 03:28:10 【问题描述】:

我想以字符串格式显示双精度变量的最大 2 位小数。如何编写一个显示非零小数的函数?

例子:

double intVar = 1;
double oneDice = 1.1;
double twoDice = 1.11;
double threeDice = 1.111;

Console.writeLine(yourFunction(intVar)); //output  1
Console.writeLine(yourFunction(oneDice)); //output  1.1
Console.writeLine(yourFunction(twoDice)); //output  1.11
Console.writeLine(yourFunction(threeDice)); //output  1.11

【问题讨论】:

从***.com/a/2453982/6741868,你可以先做double x = Math.Truncate(threeDice * 100) / 100;然后string s = string.Format("0:N2%", x);。对于他们三个。 @KeyurPATEL 使用你的,我在输入 2.3 时得到 2.29.... 为什么? 我看到了问题。我将把我的评论转移到一个答案,因为它需要几行代码。 另见***.com/questions/164926/…(decimal 的格式代码与double 相同)、***.com/questions/2453951/…(如果您想要截断而不是舍入)或其他任何字面意思Stack Overflow 上的数千个问题涉及如何格式化 double 值。 【参考方案1】:

来自我评论中的链接https://***.com/a/2453982/6741868,以及一些其他代码:

public string yourFunction(double val)

    double x = val;

    if (BitConverter.GetBytes(decimal.GetBits((decimal)val)[3])[2] > 2)   //check if there are more than 2 decimal places
    
        x = Math.Truncate(val * 100) / 100;           
        string s = string.Format("0:N2", x);
        return s;
    
    return x.ToString();

如果有超过 2 位小数,它将截断其余部分(NOT 舍入)并转换为显示 2 位小数的字符串。

否则它只是返回原始值,转换为字符串。

根据您的进一步需要随意修改函数,或者如果您想进一步调整输出字符串。

编辑

个人测试值:

1、1.1、1.11、1.111、1.138234732

结果:

1、1.1、1.11、1.11、1.13

【讨论】:

以上是关于double 在 C# 中显示 2 个非零小数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

C#中怎么对double型取两位小数。

Android double保留两位小数:截取 和 四舍五入

在C#中怎么控制float的值保留小数的位数

将double转换为字符串时,如何在C#中将其四舍五入到N个小数位? [复制]

c#中怎么把double类型转换成int类型

确定数组中 N 个非零最小值的索引