1. 每个值都是 0~1 之间的小数。每次乘之后,小数点后的 0 会越来越多。
2. 初始化循环使用变量 len_all_zero <- 0
3. 循环:
3.1 乘一次,得一次结果。此值是 a
3.2 把此结果转化为字符串,再把此字符串转化为每个数字对应一个字符的向量。此向量是 char_a。此向量的长度length(char_a) 。
此向量的格式大概是 c('0', '.', '0', '0', '0', '1', '2', '3'),前2位是c('0', '.')。令
len_this_cycle_zero <- lenght(char_a) - 2。
3.3 把 乘的结果 a 化为整数得 A = a * len_zero。
3.4 len_all_zero <- len_all_zero + len_this_cycle_zero。len_all_zero 就是每次循环里,把计算结果的小数化为整数乘以的“10的倍数”,也是
循环结束后,把最终结果再化为小数除以的“10的倍数”。
如:
0.01 * 0.01 = 0.0001 ———— c('0', '.', '0', '0', '0', '1') 长6,减去2,得 6-2 =4
0.0001 * (10*4) = 1
再次循环 1 * 0.01 = 0.01 ———— c('0', '.', '0', '1') 长4,减去2,得 4-2 = 2
0.01 * (10*2) = 1
两次循环结果1,再化为实际计算结果是 1/(10*10*10*10 * 10*10) = 1 / 1000000 = 0.000001
即,0.01 * 0.01 * 0.01 = 0.000001
数值化为字符向量的代码:
- library(stringr)
- num <- 0.000012034
- char_num <- "0.000012034"
- len_char_num <- nchar(char_num)
- char_vector <- rep(NA, len_char_num)
- for(i in 1:len_char_num){
- this_cycle_char <- substr(char_num, i, i)
- char_vector[i] <- this_cycle_char
- }
- char_vector
复制代码