decimal.parse(“value”)似乎很奇怪

时间:2012-04-04 22:09:45

标签: c#

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

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

return int.Parse("0");

我想不出任何合乎逻辑的理由而不是

if ((somevariable) > 24999.99) ...

return 0;

我错过了什么?

4 个答案:

答案 0 :(得分:8)

原始代码与您提议的更改之间存在语义差异,但您对此持怀疑态度。

从字符串转换只是简单的愚蠢,抱歉。从来没有必要这样做。区别在于原始代码将字符串解析为decimal,但您的更改将使用double。所以,它应该是:

if (somevariable > 24999.99m) ...

答案 1 :(得分:7)

首先,因为24999.99是double值而不是decimal值 - 您需要使用24999.99m。但是,是的,否则使用文字将是一个很多更好的主意。 (我也不会打扰变量的圆括号。)

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

答案 2 :(得分:1)

你没有遗漏任何东西。那段代码是虚假的。按照你在问题中描述的方式重构它。

对于值得的内容,decimal.Parse("24,999.99")将返回24999.99mdecimal而不是24999.99double。所以第一段摘录应该是

if (somevariable > 24999.99m)

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

答案 3 :(得分:-1)

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

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

他们可能希望看到使逗号更具可读性的逗号。 (其中说:eeek!可能会警告其余的代码......)