const Counter = ({ value}) => (<div>{value}</div>);
我看到其他答案表明M要明确地将类型说明为十进制 - What does the M stand for in C# Decimal literal notation?
但是,当变量的类型是专门陈述的时候,为什么要有后缀?当没有指定变量类型时,我可以看到后缀的相关性,如:
const zcContainerId = ZeroClipboard.config('containerId');
$(`#${zcContainerId}`).attr('aria-hidden', true);
答案 0 :(得分:3)
当变量的类型被排他性地说明时,为什么要有后缀?
仅在您指定的值具有小数点的情况下才需要强制转换。在您的情况下,50.0
代表double
类型的文字。您可以通过添加强制转换来避免后缀,例如
decimal l = (decimal)50.0; // Do not do this!
但这可能会导致转换错误:
decimal d = (decimal)1.23456789123456789;
Console.WriteLine(d); // Prints 1.23456789123457
decimal e = 1.23456789123456789M;
Console.WriteLine(e); // Prints 1.23456789123456789
请注意,以下内容将在没有后缀或强制转换的情况下进行编译,因为int
到decimal
转换永远不会失去精度:
decimal l = 50;
您可能需要M
后缀的另一个地方是处理小数的表达式:
decimal tenPercentBroken = myDecimal * 0.1; // Does not compile
decimal tenPercentCorrect = myDecimal * 0.1M; // Compiles fine
答案 1 :(得分:1)
50.0
是文字double
,因此如果没有M
后缀,您会尝试将double
隐式转换为decimal
(隐式转换不存在)。
使用decimal l = 50.0M;
说:将此小数分配给该十进制变量。
答案 2 :(得分:1)
我认为原因是因为右侧在赋值语句中首先被评估。
右侧的值分配给左侧的变量。因此,必须首先评估右侧,然后查看左侧,如果类型不同,则必须进行演员。