带有必填小数点的双精度数字串

wpf*_*abe 7 c# string double valueconverter

这可能是愚蠢的,但它让我很难过.我需要/格式转换一个doublestring具有强制性小数点.

1         => 1.0
0.2423423 => 0.2423423
0.1       => 0.1
1234      => 1234.0
Run Code Online (Sandbox Code Playgroud)

基本上,我想输出所有小数,但也要确保舍入值也有冗余.0.我相信有一种简单的方法可以实现这一目标.

Tim*_*ter 7

用途double.ToString("N1"):

double d1 = 1d;
double d2 = 0.2423423d;
double d3 = 0.1d;
double d4 = 1234d;
Console.WriteLine(d1.ToString("N1"));
Console.WriteLine(d2.ToString("N1"));
Console.WriteLine(d3.ToString("N1"));
Console.WriteLine(d4.ToString("N1"));
Run Code Online (Sandbox Code Playgroud)

演示

标准数字格式字符串

数字("N")格式说明符

更新

(1.234).ToString("N1")产生1.2,除了删除附加的十进制数字外,还增加了千位分隔符

好吧,也许你需要实现一个自定义NumberFormatInfo对象,你可以从当前导出CultureInfo并使用double.ToString:

var culture = CultureInfo.CurrentCulture;
var customNfi = (NumberFormatInfo)culture.NumberFormat.Clone();
customNfi.NumberDecimalDigits = 1;
customNfi.NumberGroupSeparator = "";
Console.WriteLine(d1.ToString(customNfi));
Run Code Online (Sandbox Code Playgroud)

请注意,您需要克隆它,因为默认情况下它是只读的.

演示

  • `(1.234).ToString("N1")`产生`1.2` (2认同)
  • 除了删除其他十进制数字外,它还添加了一个千位分隔符,OP的示例不包含该分隔符. (2认同)

psu*_*003 5

没有内置方法可以.0使用该.ToString()方法在整数的末尾附加强制,因为现有格式将根据您指定的小数位数进行截断或舍入。

我的建议是使用扩展方法滚动您自己的实现

public static String ToDecmialString(this double source)
{
    if ((source % 1) == 0)
        return source.ToString("f1");
    else
        return source.ToString();

}
Run Code Online (Sandbox Code Playgroud)

以及用法:

double d1 = 1;
double d2 = 0.2423423;
double d3 = 0.1;
double d4 = 1234;
Console.WriteLine(d1.ToDecimalString());
Console.WriteLine(d2.ToDecimalString());
Console.WriteLine(d3.ToDecimalString());
Console.WriteLine(d4.ToDecimalString());
Run Code Online (Sandbox Code Playgroud)

此输出中的结果:

1.0
0.2423423
0.1
1234.0
Run Code Online (Sandbox Code Playgroud)