1
zxCoder 2021-09-24 11:07:52 +08:00
没听懂。。。。你是想解决这个“数学问题”?还是说是写代码怎么处理?那保存结果的分子分母?这样肯定是准确的
|
2
Vinty 2021-09-24 11:12:32 +08:00
用符号运算
|
3
deplivesb 2021-09-24 11:13:44 +08:00
你确定这个是数学问题么?
|
4
cmdOptionKana 2021-09-24 11:16:22 +08:00
根据具体目的灵活处理,会计专业肯定有处理
这些问题的约定俗成的方法。 |
5
cmdOptionKana 2021-09-24 11:20:49 +08:00
比如,要看你把这两部操作当作“总是前后发生的一个固定流程”,还是看成“两个独立事件,其中第二个事件可能发生,可能不发生,可能相隔久远才发生”。
如果看作两个独立事件,那么当第一步舍弃精度时,就已经决定了后续不可能完美还原。如果确实有必要,可以考虑使用分数,但这会导致系统很复杂。 |
6
GuuJiang 2021-09-24 11:26:23 +08:00 via iPhone
又见 XY 问题,请直接说出你的原始需求,盲猜需要的是个符号运算系统
|
7
zhuawadao 2021-09-24 11:57:43 +08:00
如何得知( 3.34 或 3.334 )是商不是商
|
8
jifengg 2021-09-24 12:06:03 +08:00
数学问题:“等于 3.34”这里应该是“约等于 3.34”,丢失了精度了。用一个“约等于”的数,没法得到一个“等于”的数。你怎么知道 3.34 是由 3.335 还是 3.333 还是 3.332 约来的呢。
数学解法:10 除以 3 不表示为 3.34 ,表示为 3⅓ |
9
Jooooooooo 2021-09-24 13:05:49 +08:00
Not a math problem.
|
10
pangchaoran 2021-09-24 13:32:17 +08:00
已知: C=A/B
C1=ceil(C1,1e-3) 求 f, 使得 A=f(C1,B) 以上是你的需求吧? 由于 abs(C1-C)<1e-3, 故 abs(C1*B-A)=abs(C1-C)*B<(1e-3)*B 再加上 C1>>1e-3 故 A=round(C1*B,(1e-3)*B) 如果 B 有上限, 可以用(1e-3)*上限 作为 round 的精度 以上, 不严格想法. 需要测试 |
11
bk201 2021-09-24 13:39:35 +08:00
就是 1/3 怎么表示的问题
|
12
ipwx 2021-09-24 13:42:36 +08:00
1. 用符号、分数参与运算。
2. 浮点数最后做舍入。反正你本来系统里面任何小数都不精确,输出的时候也要舍入。 |
13
goool 2021-09-24 13:46:50 +08:00
增加一个 “内部表示” 的概念,把所有需要参与运算的数都用 “有理数” 来表达。只在需要数值的时候,才把它计算出来,不能表示为整数的,按需要精确的位数与舍入规则来确定。
具体到你的问题: 将 10 的内部表示记作 (10, 1),类似地,3 的内部表示,就是 (3, 1) 10 除以 3,就是 (10, 1) / (3, 1),做有理数除法,得到 (10, 3) (10, 3) 乘以 3,就是 (10, 3) * ( 3, 1),做有理数乘法,得到 (10, 1) |
14
kop1989 2021-09-24 13:48:07 +08:00
这个问题并不是数学问题,因为除并约等于之后,就丢失了信息。
此时 3.34 对应着不止一个被除数和除数的组合。 你怎么知道你最终想要的被除数是多少? |
15
stirlingx 2021-09-24 13:52:36 +08:00
这是一个 model 和 view 的问题,10/3 是 model,3.34 是 view,一个 model 可以有多个 view
|
16
VictorJing94 2021-09-24 15:38:51 +08:00
再给留个余数后面+上?
|
17
grimpil 2021-09-24 21:33:13 +08:00
10÷3=3.34 这一步肯定错了,只能用约等号。
|
19
lixiang2017 2021-09-25 09:06:17 +08:00 via Android
GCD
|
20
volvo007 2021-09-25 12:41:19 +08:00
感觉严格操作的话, 不太可能还原回去, 进位的时候就已经损失信息了吧
感觉要不写个类, 一个属性放这个进一的结果, 另一个属性放符号计算结果 展示用前一个属性, 运算的时候用后一个属性? |