通过整数进行分数计数

Ste*_* H. 6 c# algorithm

我收到一个整数,表示小数面额的美元金额.我想要一种算法,可以添加这些数字而无需解析并将它们转换为双精度或小数.

例如,我收到整数50155,这意味着50和15.5/32美元.然后我收到10210,即10和21/32美元.所以50 15.5/32 + 10 21/32 = 61 4.5/32,因此:

50155 + 10210 = 61045

我想再次避免这种情况:

int a = 50155;
int b = a / 1000;
float c = a % 1000;
float d = b;
d += c / 320f;
// d = 50.484375
Run Code Online (Sandbox Code Playgroud)

我更喜欢这个:

int a = 50155;
int b = 10210;
int c = MyClass.Add(a.b); // c = 61045
...
public int Add(int a, int b)
{
    // ?????
}
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助!

Ant*_*ima 1

对我来说,这看起来像是一个奇怪的编码。

无论如何,如果格式为 10 基 Nxxx,其中 N 是表示整数美元的整数,xxx 被解释为

(xxx / 320)

如果你想把它们加在一起,你唯一需要处理的是当 xxx 超过 320 时进行进位:

int a = ..., b = ...; // dollar amounts
int c = (a + b); // add together
// Calculate carry
int carry = (c % 1000) / 320; // integer division
c += carry * 1000;
c -= carry * 320;
// done
Run Code Online (Sandbox Code Playgroud)

注意:这是有效的,因为如果 a 和 b 编码正确,小数部分加起来最多为 638,因此整个美元部分不会“溢出”。