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

本文关键字:parse value decimal | 更新日期: 2023-09-27 18:30:16

我正在处理别人的代码,看到这样的东西:

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

return int.Parse("0");

我想不出任何合乎逻辑的理由来这样做而不是

if ((somevariable) > 24999.99) ...

return 0;

我错过了什么?

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

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

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

if (somevariable > 24999.99m) ...

首先,因为 24999.99 是一个double值而不是一个decimal值 - 你会想要使用24999.99m .但是,是的,否则使用文字会是一个更好的主意。(我也不会打扰变量周围的括号。

请注意,如果在某些区域性中运行执行分析的代码,则执行分析的代码甚至会失败,其中小数分隔符未.和/或千位分隔符未,。我想不出使用它的任何充分理由。

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

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

if (somevariable > 24999.99m)

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

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

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

他们可能希望看到逗号的好处,使数字更具可读性。(上面写着:哎呀!可能要注意代码的其余部分......)