初学 怎么都写不好这个循环

2019-12-06 08:49:06 +08:00
 img5d
用 MFC 在写一个计算器,想设计最大数为 15 个字,但是当含有负号和小数点的时候没关系。
所以我就分为了几种情况
小于 16 位的时候 直接加
等于 16 位的时候 判断出了小数点或者负号在的时候 通过 ,否则报个错
等于 17 位的时候 小数点和符号都在的时候通过,否则报错
大于 17 位的时候 报错

debug 的时候 16 位的数字依然就已经可以四则运算了。。
怎么改改呢。。



void CMFCApplication1jisuanqiDlg::OnBnClickedButtonplus()
{
// TODO: ここにコントロール通知ハンドラー コードを追加します。
CString cs;
GetDlgItemText(IDC_EDITscreen, cs);
num1 = _tstof(cs);//double num1 = atof((LPSTR)(LPCTSTR)cs.GetBuffer(cs.GetLength()));
if (cs.GetLength() < 16)
{
opt = "+";
SetDlgItemText(IDC_EDITscreen, _T(""));
}
if (cs.GetLength() == 16)
{
if (cs.Find(_T(".")) || cs.Find(_T("-")))
{
opt = "+";
SetDlgItemText(IDC_EDITscreen, _T(""));
}
else
{
SetDlgItemText(IDC_EDITscreen, _T("エラー、入力桁数は1 5位です"));
}
}
if (cs.GetLength() == 17)
{
if (cs.Find(_T(".")) && cs.Find(_T("-")))
{
opt = "+";
SetDlgItemText(IDC_EDITscreen, _T(""));
}
else
{
SetDlgItemText(IDC_EDITscreen, _T("エラー、入力桁数は1 5位です"));
}
}
if (cs.GetLength() > 17)
{
SetDlgItemText(IDC_EDITscreen, _T("エラー、入力桁数は1 5位です"));
}

}
4936 次点击
所在节点    C++
15 条回复
araragi2222
2019-12-06 08:56:20 +08:00
???为啥备注是日文 故乡樱花开了??
img5d
2019-12-06 08:58:40 +08:00
@araragi2222 这不是重点吧
freewind
2019-12-06 09:07:12 +08:00
js
n.toString().replace(/\.\-/g, "").length < 16
BingoXuan
2019-12-06 09:20:10 +08:00
我看了半天还是云里雾里的。我觉得思路是应该先转化数字再考虑文本表现形式吧。我的理解是,最大数应该是 10 的 16 次方-1,小数精度为 1 位。那么直接判断数字大小就好了,再格式化吧。
shintendo
2019-12-06 09:24:20 +08:00
这个判断逻辑好复杂,为什么不这样:取长度存入变量,如果有符号减 1,如果有小数点减 1,最后结果与 15 比较。(假定你做了多个符号多个小数点的检查)
img5d
2019-12-06 09:25:16 +08:00
@shintendo 啊啊啊啊 这个厉害!
shintendo
2019-12-06 09:28:37 +08:00
@BingoXuan 没说小数精度 1 位吧,而且有可能用户给个超大的数,转换直接爆了
Tumblr
2019-12-06 09:29:06 +08:00
代码为啥不用 script block。。。
anuding
2019-12-06 09:29:21 +08:00
@araragi2222 复制的网上的日文教程 /博客吧
podel
2019-12-06 09:39:24 +08:00
楼主为啥不做字符串扫描的。也就那么一点点字符把。另外楼主甚至可以弄一个 button 让别人只能点 button 限制用户输入。
或者 hook 文本框的输入。每次输入的时候都 check 一下。check 过才让进去。
si
2019-12-06 10:02:06 +08:00
CString::Find,函数名称,返回此 CString 对象中与需要的子字符串或字符匹配的第一个字符的从零开始的索引;如果没有找到子字符串或字符则返回-1.
没找到返回-1,-1 也是 true,找到也会返回 0,0 是 false。
要全部改成 cs.Find() != -1 吧
XiaoWangZhanzz
2019-12-06 10:23:42 +08:00
难道是跨国友人,也知道 V2E 了
IGJacklove
2019-12-06 10:30:28 +08:00
老哥不会在日本吧?
a2ex
2019-12-06 10:42:37 +08:00
日语注释楼主还不说的原因是对日外包吧
BingoXuan
2019-12-06 10:45:32 +08:00
@shintendo
抱歉我说的有歧义,我的意思是 15 位数的时候且有符号允许的小数位。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/626385

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX