3

由于多种原因,我必须在代码中使用浮点数而不是双精度数。要在我的代码中使用文字,我必须编写如下内容:

float f = 0.75F;

否则编译器会出错,因为它将“0.75”视为双精度。有什么我可以放入我的代码或在 Visual Studio 中设置的东西,可以让它将像“0.75”这样的文字视为浮点数,而不必每次都附加一个“F”?

4

6 回答 6

14

不 - 幸运的是,IMO。文字在任何地方都以相同的方式处理。

这是一件好事——想象一下某个维护开发人员会在一年后来查看您的代码。他看到“0.75”并认为“我知道 C# - 那是双精度数!等等,它是如何分配给浮点变量的?” 伊克。

到处加“F”真的那么痛苦吗?你真的有那么多常数吗?您能否将它们提取常量值,以便您所有的“F 后缀”文字都在同一个地方。

于 2009-07-20T14:13:36.410 回答
1

该语言将浮点精度文字解释为各处的双精度值。这不是编译器的可配置功能 - 并且有充分的理由。

配置语言解释代码的方式会导致兼容性和维护开发人员理解代码含义的能力方面的问题。

虽然通常不建议使用,但您可以通过使用以下方法在 C# 3 中稍微减轻痛苦:

var f = 0.75F;

请小心,因为使用这种语法忘记“F”后缀会导致编译器创建一个双精度数,而不是一个浮点数。

于 2009-07-20T14:16:31.820 回答
1

仅供参考 - 您可以在http://msdn.microsoft.com/en-us/library/6ds95cz0.aspx找到 C# 的所有编译器选项。如果您在那里检查,您会发现没有任何选项允许这样做 - 由于@Jon Skeet 指出的原因,这是正确的。

于 2009-07-20T14:18:22.720 回答
0

Float 带有一个 F :-)

于 2009-07-20T14:20:39.613 回答
0

我建议您始终使用

var meaning = 1f;

因为“var”关键字节省了大量的人工解释和维护时间。

于 2009-07-21T21:06:22.040 回答
0

The proper behavior would not be for a compiler to interpret non-suffixed literals as single-precision floats, but rather to recognize that conversions from double to float should be regarded as widening conversions since, for every double value, there is either precisely one unambiguously-correct float representation, or (in a few rare edge cases) there will be precisely two equally-good values, neither of which will be more than a part per quadrillion from being the unambiguously-correct value. Semantically, conversions from float to double should be regarded as narrowing conversions (since they require that the compiler "guess" at information it doesn't have), but the practical difficulties that would cause might justify making conversions in that direction 'widening'.

Perhaps one should petition Microsoft to add a widening conversion from double to float? There's no good reason why code which calculates graphics coordinates as double should be cluttered with typecasts when calling drawing functions.

于 2012-06-09T22:40:08.537 回答