寻找一种在C#中使用浮点数的简单方法

时间:2009-07-20 14:11:34

标签: c# .net floating-point double

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

float f = 0.75F;

或编译器会barf,因为它只将“0.75”视为double。有什么东西可以放在我的代码中或在Visual Studio中设置,它会使它像“0.75”这样的文字作为一个浮点数而不必每次都附加一个“F”吗?

6 个答案:

答案 0 :(得分:14)

不 - 幸运的是,IMO。文字在任何地方都被视为同样的方式。

这是一件好事 - 想象一下维护开发人员会在一年后查看您的代码。他看到“0.75”,并认为“我知道C# - 这是一个双倍!坚持下去,它如何分配给一个浮点变量?” ICK。

到处添加“F”真的很痛苦吗?你真的有 许多常数吗?你能否将提取为常量值,所以你所有的“F后缀”文字都在同一个地方。

答案 1 :(得分:1)

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

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

虽然一般不可取,但您可以使用以下方法减少C#3中的疼痛:

var f = 0.75F;

请注意,因为使用此语法忘记'F'后缀会导致编译器创建double,而不是float。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

Float带有F: - )

答案 4 :(得分:0)

我建议你一直使用

var meaning = 1f;

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

答案 5 :(得分:0)

正确的行为不是编译器将非后缀文字解释为单精度浮点数,而是要认识到从double到float的转换应该被视为加宽转换,因为对于每个double值,或者恰好有一个明确正确的float表示,或者(在一些罕见的边缘情况下)将有恰好两个同样好的值,这两个值都不会超过千万亿分之一的明确值 - 正确的价值。在语义上,从floatdouble的转换应该被视为缩小转换(因为它们要求编译器“猜测”它没有的信息),但是可能导致的实际困难可能是合理的转向这个方向'扩大'。

也许应该请求微软添加从doublefloat的扩展转换?在调用绘图函数时,为什么计算图形坐标为double的代码应该与类型转换混杂在一起是没有充分理由的。