数学运算

2025-07-09 19:55:36

字符串相加

给定两个字符串形式的正数相加

add.ts
test.ts
          function 
add
(
a
: string,
b
: string) {
let [
intA
,
decA
= ''] =
a
.
split
('.')
let [
intB
,
decB
= ''] =
b
.
split
('.')
const
maxIntLen
=
Math
.
max
(
intA
.
length
,
intB
.
length
)
const
maxDecLen
=
Math
.
max
(
decA
.
length
,
decB
.
length
)
intA
=
intA
.
padStart
(
maxIntLen
, '0')
intB
=
intB
.
padStart
(
maxIntLen
, '0')
decA
=
decA
.
padEnd
(
maxDecLen
, '0')
decB
=
decB
.
padEnd
(
maxDecLen
, '0')
let
carry
= 0
let
decimal
= ''
for (let
i
=
maxDecLen
- 1;
i
>= 0;
i
--) {
const
sum
=
Number
(
decA
[
i
]) +
Number
(
decB
[
i
]) + carry
decimal
= (
sum
% 10) + decimal
carry
=
Math
.
floor
(
sum
/ 10)
} let
integer
= ''
for (let
i
=
maxIntLen
- 1;
i
>= 0;
i
--) {
const
sum
=
Number
(
intA
[
i
]) +
Number
(
intB
[
i
]) + carry
integer
= (
sum
% 10) + integer
carry
=
Math
.
floor
(
sum
/ 10)
} if (
carry
> 0)
integer
=
carry
+ integer
decimal
=
decimal
.
replace
(/0+$/, '')
return
decimal
? `${
integer
}.${
decimal
}` : integer
}
          expect(add('0.1', '0.2')).toBe("0.3")
expect(add('1.818', '1.2')).toBe("3.018")
expect(add('0.09', '0.001')).toBe("0.091")
expect(add('999.999', '0.001')).toBe("1000")
expect(add('1', '999999999999')).toBe("1000000000000")

        
© 2021-2025 sunshj's Blog