这可能是愚蠢的,但它让我很难过。我需要使用必填小数点将double
转换/格式化为string
。
1 => 1.0
0.2423423 => 0.2423423
0.1 => 0.1
1234 => 1234.0
基本上,我想输出所有小数,但也要确保舍入值也有冗余.0
。我确信有一种简单的方法可以实现这一目标。
答案 0 :(得分: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"));
Standard Numeric Format Strings
The Numeric ("N") Format Specifier
<强>更新强>
(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));
请注意,您需要克隆它,因为默认情况下它是只读的。
答案 1 :(得分:4)
没有内置方法可以使用.0
方法将强制.ToString()
附加到整数的末尾,因为现有格式将根据您的小数位数截断或舍入指定。
我的建议是使用扩展方法滚动您自己的实现
public static String ToDecmialString(this double source)
{
if ((source % 1) == 0)
return source.ToString("f1");
else
return source.ToString();
}
用法:
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());
此输出结果:
1.0
0.2423423
0.1
1234.0
答案 2 :(得分:3)
您可以这样做:如果数字没有小数点,您可以格式化其输出以强制执行一个小数0,如果它有小数位,只需使用ToString();
double a1 = 1;
double a2 = 0.2423423;
string result = string.Empty;
if(a1 - Math.Floor(a1) >0.0)
result = a1.ToString();
else
result = a1.ToString("F1");
if (a2 - Math.Floor(a2) > 0.0)
result = a2.ToString();
else
result = a2.ToString("F1");
当您使用"F"
作为格式时,输出将不包含千位分隔符,其后面的数字指定小数位数。
答案 3 :(得分:0)
Double提供了一种方法ToString()
,您可以在其中传递IFormatProvider
- 对象,说明您希望如何转换double
。
此外,它应该不惜一切代价显示尾随0
。
value = 16034.125E21;
// Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture));
// Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")));
// Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")));
// This example displays the following output to the console:
// -16325.62015
// -16325.62015
// -16325,62015
// 1.6034125E+25
// 1.6034125E+25
// 1,6034125E+25
Here是来自MSDN的文档。
答案 4 :(得分:0)
使用ToString(&#34; 0.0 ###########################&#34;)。
确实有效。我发现它与您的问题decimal ToString formatting which gives at least 1 digit, no upper limit
重复一遍答案 5 :(得分:-1)
如果没有给出小数点
,你可以转换为字符串然后appen“.0”string sValue=doubleValue.ToString();
if(!sValue.Contains('.'))
sValue+=".0";
编辑: 如评论中所述'。'可能不是当前文化中的小数分隔符。如果您希望在这种情况下保存代码,请参阅this article以检索实际的分隔符。