简而言之,我想知道为什么下面的ToString()行不符合我的期望。需要帮助了解C#浮点字符串格式化
float actual = 111253.469F;
double rounded = Math.Round(actual, 2); // 111253.47 (expected)
string stringified = actual.ToString(); // 111253.50 (expected 111253.469)
string currency = actual.ToString("C"); // $111253.50 (expected 111253.47 or possibly .46)
有人可以解释发生了什么吗?
注意: 我不认为浮点值是准确的,每浮点数的其他问题。不过,我确实希望字符串输出反映所讨论的浮点数的字符串值。
在这种情况下,如果我设置了一个断点并在快速查看中查看'actual'的值,它不会显示'111253.5',它会显示'111253.469'。我不明白为什么打印时不会这样。特别是在货币情况下,我期望它将四舍五入到适当的小数点,然后显示,而不是选择其他字面值。这不是一个数学问题,它是一个ToString()行为问题。
编辑: 每Quantic的评论下面,它出现在ToString
使用G
格式默认情况下,限制数量7显著位,导致这里被看到的数量。
不可能。 111253将永远不会给出11253作为输出 –
@ThomasWeller对不起,我的评论线不准确(不包括第一个1),但它是扔给我的小数部分,对不起。我会纠正的。 – SWC
如果你想要小数点上的两个数字,你可以使用下面的例子:ToString(“0.00”); ToString(“n2”); //代码为 ToString(“c2”); //对于货币 – tdog