ToString(string) 没有格式化浮点数?正如我所期望的那样

Posted

技术标签:

【中文标题】ToString(string) 没有格式化浮点数?正如我所期望的那样【英文标题】:ToString(string) not formatting a float? as I would expect it to 【发布时间】:2016-02-01 04:54:42 【问题描述】:

我正在使用 WinForms 应用程序,格式化后在视图中显示一个字符串。

这是我尝试格式化数字的方式:

reportData.VelocityRangeStart.ToString(reportData.Velocity.FormatString)

以下是在 Visual Studio 中使用即时窗口的结果:

reportData.VelocityRangeStart
12.5996475    // output
reportData.Velocity.FormatString
"#,##0.000"    // output
reportData.VelocityRangeStart.ToString(reportData.Velocity.FormatString)
"12.59965"    // output
12.5996475f.ToString("#,##0.000")
"12.600"    // output

有人可以解释我缺少什么吗?在这种情况下,我希望"12.600"。仅供参考:reportData.VelocityRangeStart 属于 float? 类型。

【问题讨论】:

试试这个msdn.microsoft.com/en-us/library/… 请查看minimal reproducible example 指导 - 您发布的任何代码都非常混乱。 reportData.VelocityRangeStart的类型是什么?将其转换为浮点数会首先改变结果吗? 如果你这样做reportData.VelocityRangeStart.Value.ToString(reportData.Velocity.FormatString),它还会这样做吗? @AlexeiLevenkov,删除了这些笑话。如果您一次粘贴整个内容,代码仍然无法编译。但是,如果您复制并粘贴每个输入行,您的指尖就很方便了。 【参考方案1】:

可空类型甚至不应该有ToString() 重载格式字符串。您需要使用reportData.VelocityRangeStart.Value.ToString(reportData.Velocity.FormatString) 来进行格式化工作。

并且不要忘记首先检查值中的空值!所以

reportData.VelocityRangeStart.HasValue ? reportData.VelocityRangeStart.Value.ToString(reportData.Velocity.FormatString) : "is null"

【讨论】:

非常感谢。这种行为是否表明存在错误? 而他确实提到的地方是使用可空类型。 @Sami 或者它只是黑暗中的一个箭头 @Dot_NETPro 也许就在最后说的类型? @JakeSmith 这就是 Nullable 类型的工作方式。由于并非所有类型都具有带有格式字符串的 ToString(),因此我假设他们没有将其添加到 Nullable 本身,并且必须手动处理。 我删除了最后一段中不必要的措辞,以更加强调我提到的类型以供将来参考。【参考方案2】:

我想你想用这个:

float VelocityRangeStart=12.5996475F;
string strVelocityRangeStart=VelocityRangeStart.ToString();
Console.WriteLine((Math.Ceiling(Double.Parse(strVelocityRangeStart)).ToString()));

【讨论】:

我很确定他们不希望这样。试试看它输出了什么。 Math.Ceiling(reportData.VelocityRangeStart).ToString() error CS1503: Argument 1: cannot convert from 'float?' to 'decimal'

以上是关于ToString(string) 没有格式化浮点数?正如我所期望的那样的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中打印/格式化具有“仅能区分”数字的区域感知浮点数

在 C++ 中将浮点数转换为 std::string

//%f表示以十进制格式化输出浮点数 %.2f

Java 浮点数精度控制

格式化没有尾随零的浮点数

String格式化参数整理