4

我正在处理其他人的代码,并看到如下内容:

if ((somevariable) >  decimal.Parse("24,999.99")) ...

return int.Parse("0");

我想不出任何合乎逻辑的理由来代替

if ((somevariable) > 24999.99) ...

或者

return 0;

我错过了什么?

4

4 回答 4

8

原始代码和您提议的更改之间存在语义差异,但您的怀疑是正确的。

对不起,从字符串转换简直是愚蠢的。永远没有必要这样做。不同之处在于原始代码将字符串解析为 a decimal,但您的更改将使用 a double。所以,它应该是:

if (somevariable > 24999.99m) ...
于 2012-04-04T22:12:24.280 回答
7

一方面,因为 24999.99 是一个double值而不是一个decimal值 - 你会想要使用24999.99m. 但是,是的,否则使用文字会更好(我也不会为变量周围的括号而烦恼。)

请注意,执行解析的代码甚至会失败,如果它在某些文化中运行,其中小数分隔符不是.和/或千位分隔符不是,. 我想不出任何好的理由来使用它。

于 2012-04-04T22:13:07.400 回答
1

你没有错过任何东西。那个代码是假的。按照您在问题中描述的方式重构它。

对于它的价值,decimal.Parse("24,999.99")将返回24999.99madecimal而不是24999.99a double。所以第一个摘录真的应该是

if (somevariable > 24999.99m)

当然,这假设比较中的右手操作数确实应该是 a decimal。鉴于这段代码的性质,我会怀疑一切的正确性。

于 2012-04-04T22:12:54.480 回答
-1

解析中的字符串是否真的作为字符串文字输入,而不是作为变量输入?

如果是这样,我会说这只是可怕的编码,我只希望他们没有把它放在热点函数中。这将是一个糟糕的编码器的标志。我听说其中一些存在。

他们可能希望看到逗号使数字更具可读性。(上面写着:eeek!可能会警告其余代码......)

于 2012-04-04T22:17:10.147 回答