static void Main()
{
float value = 1.35f;
while (value<11)
{
uint dollars = (uint)value;
ushort cents = (ushort)((value - dollars) * 100);
Console.WriteLine(cents.ToString());
value++;
}
}代码改自C#高级编程关于类型转换的例子,例子采用数字50.35来说明圆整错误
但是,按照上面的代码看,圆整错误并不总是发生,而且和小数部分没有必然的
关系,这是和float数据的存储格式有什么关联吗?如果仅仅是考虑十进制转换
为二进制的话,小数部分的0.35是无论如何都无法用二进制确切表示的啊。
求大侠解释。
解决方案 »
- 急求c# listview中的内容导出为.csv格式数据
- svn 1.6.5 中文语言包 现在有了没
- 请大家帮我解析一下,这条程序
- 如何通过表名取出它的所有列名
- 请问知道某一年(如2007),如何返回一个数组,数组的每个成员为某月最后一天?
- DataGridView的使用,如何能让他漂亮点!
- 几个关于DataGrid的问题.
- 一个小小的WEB应用程序,请指教!
- C#调用C++程序中的DLL接口,两段代码单独运行没问题,合并后只能顺序运行
- Windows Form DataGrid如何及时调整用户的输入?
- 请大虾来解决一下我们小虾的问题
- CSDN的各位高手,小弟想请教一下C#中有哪些方便的快捷键可以提高编译速度!
class NumTest
{
static void Main()
{
float value = 1.35f;
while (value<11)
{
int dollars = (int)value;
short cents = Convert.ToSByte(((value - dollars) * 100));
Console.WriteLine(cents.ToString());
value++;
}
}
}如果使用预定义的静态方法,则没有出现该情况。说明该方法进行了特殊处理,也就是所谓的“圆整”,
只是因为按照书上做的时候代入了不同数字,出现了不同结果,很是好奇
不过还是很感谢你回复我
ushort us = BitConverter.ToUInt16(BitConverter.GetBytes(f), 0);
这种才跟计算机二进制存储方式有关系...而浮点数转换为整型数仅仅是丢失精度,转换规则直接抛弃小数而已...至于浮点数与高精度类型转换decimal过程可能产生的误差也仅仅是浮点数存储本身造成的误差,和转换本身没有关系...比如,这个...
float f = 50.35f;
double d = f;尽信书不如无书...