找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 28|回复: 0

[数值计算] [分享]批处理计算理财产品区间年化

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式

实用脚本


  1. @echo off
  2. title 区间年化计算器

  3. :MAIN
  4. cls
  5. echo ========================================
  6. echo            区间年化计算器
  7. echo ========================================
  8. echo.
  9. echo 日期可输入:
  10. echo   0803
  11. echo   803
  12. echo   8.3
  13. echo   8-3
  14. echo   8/3
  15. echo.
  16. echo 跨年自动识别,例如:1228 到 0105
  17. echo 输入 Q 退出
  18. echo.

  19. set "SD="
  20. set "ED="
  21. set "SN="
  22. set "EN="

  23. set /p "SD=开始日期:"
  24. if /i "%SD%"=="Q" exit /b

  25. set /p "SN=开始净值:"

  26. set /p "ED=结束日期:"
  27. if /i "%ED%"=="Q" exit /b

  28. set /p "EN=结束净值:"

  29. set "START_DATE=%SD%"
  30. set "END_DATE=%ED%"
  31. set "START_NAV=%SN%"
  32. set "END_NAV=%EN%"

  33. echo.
  34. echo ----------------------------------------

  35. powershell.exe -NoProfile -Command "$ErrorActionPreference='Stop';function ParseMD([string]$v){$v=$v.Trim();if($v -match '^(\d{1,2})[./-](\d{1,2})$'){return @([int]$Matches[1],[int]$Matches[2])};if($v -match '^\d{4}$'){return @([int]$v.Substring(0,2),[int]$v.Substring(2,2))};if($v -match '^\d{3}$'){return @([int]$v.Substring(0,1),[int]$v.Substring(1,2))};throw '日期格式错误'};try{$a=ParseMD $env:START_DATE;$b=ParseMD $env:END_DATE;$sm=$a[0];$sd=$a[1];$em=$b[0];$ed=$b[1];$y=(Get-Date).Year;$ey=$y;if(($em -lt $sm)-or(($em -eq $sm)-and($ed -lt $sd))){$ey++};$sdt=Get-Date -Year $y -Month $sm -Day $sd -Hour 0 -Minute 0 -Second 0;$edt=Get-Date -Year $ey -Month $em -Day $ed -Hour 0 -Minute 0 -Second 0;$days=[int]($edt-$sdt).TotalDays;if($days -le 0){throw '结束日期必须晚于开始日期'};$ci=[Globalization.CultureInfo]::InvariantCulture;$sv=[double]::Parse($env:START_NAV,$ci);$ev=[double]::Parse($env:END_NAV,$ci);if($sv -le 0 -or $ev -le 0){throw '净值必须大于0'};$r=$ev/$sv-1;$simple=$r*365/$days*100;$compound=([Math]::Pow($ev/$sv,365.0/$days)-1)*100;$pct=[char]37;$lines=@(('区间:{0:yyyy-MM-dd} 到 {1:yyyy-MM-dd}' -f $sdt,$edt),('区间天数:{0} 天' -f $days),('区间收益率:{0:F4}{1}' -f ($r*100),$pct),('简单年化:{0:F4}{1}' -f $simple,$pct),('复利年化:{0:F4}{1}' -f $compound,$pct));$lines|ForEach-Object{Write-Host $_}}catch{Write-Host ('错误:'+$_.Exception.Message) -ForegroundColor Red}"

  36. echo ----------------------------------------
  37. echo.
  38. pause
  39. goto MAIN
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-9-8 18:44

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表