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 个非零小数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Android double保留两位小数:截取 和 四舍五入