我自己有开发了一个股票自动交易软件。

背景:原来我所有的金钱计算用的都是decimal类型。然后后面我看行情数据哪边大部分人用的都是float类型。于是我也决定将所有的类型全部都换成了float类型。

然后最近怪事就来了,第一次进行买入的时候都是没有办法掇合成功。再接下来用很少的钱进行购买的时候却可以成功了。

但是看一下剩下的钱变成负的了。非常的神奇。

第一次为什么会没有办法掇合成功呢。

买 的掇合是一件很简单的事情。经过分析发现原来在进行买掇合的时候我会用进行一下花的钱和剩下来的现金进行一下比较。

如果钱不过的话当然是不可能买入的了。

这样我知道我的最大可买数量肯定是算错了。

后面发现 原来 float有一个bug

我在计算最大可买 数量的时候 最终是转换成 int类型。

用LinqPad对下面的进行一下测试

float k =1.999999999999998f;
    
    int i = (int)k;
    i.Dump();
    
    decimal k2 = 1.999999999999999999999999m;
    int i2 = (int)k2;
    i2.Dump();
    
    int i3 = (int)(decimal)k;
    i3.Dump();

发现结果是 212 就是float在转成其它类型的时候并不是严格舍去小数点后面位数。

void Main()
{
    float m= (1/100)*100;
    int k = (int)m;
    "第一个测试".Dump();
    k.Dump();
    
    float m2 = 1;
    int k2 = (int)m2;
    "第二个测试".Dump();
    k2.Dump();
    
    decimal m3 = (1/100);
    "第三个测试".Dump();
    m3.Dump();
    int k3 = (int)(m3*100);
    
    k3.Dump();
    
    decimal m4 = (1m/100m);
    "第四个测试".Dump();
    m4.Dump();
    int k4 = (int)(m4*100m);
    k4.Dump();
}
第一个测试 

0

第二个测试 

1

第三个测试 

0

0

第四个测试 

0.01

1

从这边你可以看出来一些东西的。

转载于:https://www.cnblogs.com/lovebanyi/archive/2011/11/01/2231223.html

Float 运算的怪异性相关推荐

  1. java 字符串 float_Java 字符串转float运算 float转字符串

    需求:字符串(字符串只有一位小数)转float进行运算, 将结果转成字符串(保留一位小数) 直接上代码: float f1 = 0.1f; String a1 ="1.5"; Sy ...

  2. 关于STM32没有硬件浮点单元的纯经验之谈,是否可以在stm32上用float运算?

    STM32尽管在MCU领域算是资源和算力还可以的,但是真的不要把它想的太厉害,因为它真的只适合做一些简单的控制.如果希望他实时产生正弦波或者指数或者三角波,最好是事先计算好然后查表.或者就用DSP.. ...

  3. float php 运算_PHP浮点数(float)运算过程中出现的错误问题解决方案

    PHP开发中经常会涉及到金额的计算,而大多数线上项目的金额会精确到单位分,而在PHP运算中经常会遇到浮点数运算的偏差,导致金额统计错误和运算判断上的偏差. 案例1(浮点数相加):$x = 0.1; $ ...

  4. java float 运算_java float除法的问题

    展开全部 您好,1.整数的除法:32313133353236313431303231363533e78988e69d8331333337386536 0做除数抛运行时异常:两整数商会做取整运算,Flo ...

  5. js parsefloat 精度_javascript中的float运算精度

    有人问到一个js问题:var i = 0.07; var r = i*100; alert(r); 结果为什么是7.0000000000000001? 查了下资料,其实我们知道JavsScript中, ...

  6. js中float运算

    /浮点数加法运算 function FloatAdd(arg1,arg2){ var r1,r2,m; try{r1=arg1.toString().split(".")[1].l ...

  7. c语言char float混合类型运算,求int long char double float 在混合运算中的自动转换规则 win 32位系统。...

    满意答案 yesyesq 推荐于 2018.05.11 采纳率:40%    等级:9 已帮助:1063人 在程序运行中,变量的数据类型是可以转换的,转换方式有两种. 一.自动转换:自动转换发生在不同 ...

  8. bigdicmal除法精度设置_Java BigDecimal浮点数运算--如何保证运算精度不溢出

    加减乘除四则运算是高级程序设计语言(不论机器语言.汇编还是其他高级语言)最基础的部分,Java作为最流行的软件开发语言之一,涉及四则运算的程序代码和功能业务随处可见.在笔者从事的基于Java语言银行. ...

  9. CPU GPU设计工作原理《转》

    我知道这非常长,可是,我坚持看完了.希望有幸看到这文章并对图形方面有兴趣的朋友,也能坚持看完.一定大有收获.毕竟知道它们究竟是怎么"私下勾搭"的.会有利于我们用程序来指挥它们... ...

最新文章

  1. Maya2022基础入门学习教程
  2. DevOps的工程化
  3. 现状,疑问,思考,探索,选择
  4. Linux常用命令——压缩与解压缩命令
  5. Java四大知识点讲解,初学者必看
  6. 苹果上新了!新款iPad Pro发布:妙控键盘成最大惊喜
  7. 关于HTML Button点击自动刷新页面的问题解决
  8. chmod命令使用详解
  9. 织梦网站地图html制作,dedecms织梦制作xml网站地图的方法
  10. 思维导图使用技巧:手把手教你怎么画思维导图
  11. web前后端分离系统之间的单点登录
  12. 知识点 —— Python基础-1
  13. 魔兽世界怀旧服最新服务器开发时间,魔兽世界怀旧服明日开放,开服第一天“大部队”能升到多少级?...
  14. Energy Vault宣布完成1亿美元C轮融资
  15. 内存学习(三)内存泄露
  16. 微信小程序点击图片预览真机无法显示的问题
  17. opengl绘制金字塔
  18. 威马D轮敲定,「造车新势力」四小龙已定
  19. android 代码删除快捷方式,Android创建快捷方式以及删除快捷方式
  20. web前端面试 js部分

热门文章

  1. Windows 7 任务栏开发 之 进度条(Progress Bar)
  2. debian ubuntu 记录系统启动信息
  3. vi 不保存退出_vi或vim的快速操作技巧你知道吗?
  4. java web 数据验证_kpvalidate开辟验证组件,通用Java Web请求服务器端数据验证组件...
  5. abb工业机器人教程 zxw_【ABB工业机器人应用】YUMI-软管装配
  6. 安卓查看php文件是否存在,Android_Android编程判断SD卡是否存在及使用容量查询实现方法,本文实例讲述了Android编程判断 - phpStudy...
  7. python自动修图_有码变高清!AI修图PULSE一秒还原马赛克
  8. java 把文件打包成zip_java 文件流的处理 文件打包成zip
  9. python 批量打印文档_使用python将Excel数据填充Word模板并生成Word
  10. Java 并发编程之同步工具类闭锁 CountDownLatch