请原谅我的n 00 b问题:p
我在试着把小数转换成整数。
因此,到目前为止,我已经找到了三种有效的方法和几种无效的方法。
这似乎很奇怪:
A:试验A和B在光谱的相反两端失败。
B:如果我改变数组arr_decimals[7]中的值'0.14'和'0.28',那么试验C就可以工作。任何在这两个索引中有'4'或'8'的值都失败!几乎任何其他值都可以工作。
从字面上看,只是把“14”改为“17”,把“28”改为“27”......哈哈,结束了?
我已经为这三个解决方案挣扎了四天,但没有一个完全有效。我感觉好像我在逻辑上出现了一些n 00 b错误。另外,请原谅我的代码格式,下面,这是我在stackoveflow上的第一篇文章。
#include <iostream>
int main()
{
// long doubles for scalablility
long double arr_decimals[7]{ 0.02, 0.06, 0.1, 0.14, 0.18, 0.22, 0.28 };
long double arr_pre_values[7]{ 0, 0, 0, 0, 0, 0, 0 };
long double arr_not_values[7]{ 0, 0, 0, 0, 0, 0, 0 };
long double arr_input_values[7]{ 0, 0, 0, 0, 0, 0, 0 };
long double arr_test_values[7]{ 0, 0, 0, 0, 0, 0, 0 };
int var_array_length = 7;
int var_int_value = 0;
bool bool_more_trailing_zeros = 0;
// trial A:
std::cout << "trial A:" << std::endl;
for (int var_change = 0; var_change < var_array_length; var_change++)
{
if (arr_decimals[var_change] >= 0.000001 && arr_decimals[var_change] < 0.000009) arr_pre_values[var_change] = arr_decimals[var_change] * 10000000; // seven decimals places
else if (arr_decimals[var_change] >= 0.00001 && arr_decimals[var_change] < 0.00009) arr_pre_values[var_change] = arr_decimals[var_change] * 1000000; // six ...
else if (arr_decimals[var_change] >= 0.0001 && arr_decimals[var_change] < 0.0009) arr_pre_values[var_change] = arr_decimals[var_change] * 100000; // five ...
else if (arr_decimals[var_change] >= 0.001 && arr_decimals[var_change] < 0.009) arr_pre_values[var_change] = arr_decimals[var_change] * 10000; // four ...
else if (arr_decimals[var_change] >= 0.01 && arr_decimals[var_change] < 0.09) arr_pre_values[var_change] = arr_decimals[var_change] * 1000; // three ...
else if (arr_decimals[var_change] >= 0.1 && arr_decimals[var_change] < 0.9) arr_pre_values[var_change] = arr_decimals[var_change] * 100; // two ..
else if (arr_decimals[var_change] < 1) arr_pre_values[var_change] = arr_decimals[var_change] * 10; // one ..
else std::cout << "Error: unexpected value: " << arr_decimals[var_change] << std::endl;
std::cout << "arr_pre_values: " << arr_pre_values[var_change] << std::endl;
}
std::cout << std::endl;
// trial B:
std::cout << "trial B:" << std::endl;
for (int var_change = 0; var_change < var_array_length; var_change++)
{
if (arr_decimals[var_change] < 0.000001) arr_not_values[var_change] = arr_decimals[var_change] * 10000000; // seven decimals places
else if (arr_decimals[var_change] < 0.000009) arr_not_values[var_change] = arr_decimals[var_change] * 1000000; // six ...
else if (arr_decimals[var_change] < 0.00009) arr_not_values[var_change] = arr_decimals[var_change] * 100000; // five ...
else if (arr_decimals[var_change] < 0.0009) arr_not_values[var_change] = arr_decimals[var_change] * 10000; // four ...
else if (arr_decimals[var_change] < 0.009) arr_not_values[var_change] = arr_decimals[var_change] * 1000; // three ...
else if (arr_decimals[var_change] < 0.09) arr_not_values[var_change] = arr_decimals[var_change] * 100; // two ..
else if (arr_decimals[var_change] < 1) arr_not_values[var_change] = arr_decimals[var_change] * 10; // one ..
else std::cout << "Error: unexpected value: " << arr_decimals[var_change] << std::endl;
std::cout << "arr_not_values: " << arr_not_values[var_change] << std::endl;
}
std::cout << std::endl;
// trial C:
std::cout << "trial C:" << std::endl;
std::copy(std::begin(arr_decimals), std::end(arr_decimals), std::begin(arr_input_values));
for (int var_change = 0; var_change < var_array_length; var_change++)
{
bool_more_trailing_zeros = 1;
while (bool_more_trailing_zeros)
{
std::cout << "arr_input_values: " << arr_input_values[var_change] << std::endl;
var_int_value = static_cast<long double>(arr_input_values[var_change]);
std::cout << "var_int_value: " << var_int_value << std::endl;
// compare long double to int
if (arr_input_values[var_change] != var_int_value)
{
arr_input_values[var_change] *= 10;
}
// move value and end loop
else // if (arr_input_values[var_change] == var_int_value)
{
arr_test_values[var_change] = arr_input_values[var_change];
bool_more_trailing_zeros = 0;
}
}
std::cout << typeid(var_int_value).name() << " --------->> " << "arr_test_values: " << arr_test_values[var_change] << std::endl;
}
return 0;
}
控制台打印输出失败:
>! arr_pre_values: 20
>! arr_pre_values: 60
>! arr_pre_values: 10
>! arr_pre_values: 14
>! arr_pre_values: 18
>! arr_pre_values: 22
>! arr_pre_values: 28
>!
>! arr_not_values: 2
>! arr_not_values: 6
>! arr_not_values: 1
>! arr_not_values: 1.4
>! arr_not_values: 1.8
>! arr_not_values: 2.2
>! arr_not_values: 2.8
>!
>! arr_input_values: 0.02
>! var_int_value: 0
>! arr_input_values: 0.2
>! var_int_value: 0
>! arr_input_values: 2
>! var_int_value: 2
>! int --------->> arr_test_values: 2
>! arr_input_values: 0.06
>! var_int_value: 0
>! arr_input_values: 0.6
>! var_int_value: 0
>! arr_input_values: 6
>! var_int_value: 6
>! int --------->> arr_test_values: 6
>! arr_input_values: 0.1
>! var_int_value: 0
>! arr_input_values: 1
>! var_int_value: 1
>! int --------->> arr_test_values: 1
>! arr_input_values: 0.14
>! var_int_value: 0
>! arr_input_values: 1.4
>! var_int_value: 1
>! arr_input_values: 14
>! var_int_value: 14
>! arr_input_values: 140
>! var_int_value: 140
>! arr_input_values: 1400
>! var_int_value: 1400
>! arr_input_values: 14000
>! var_int_value: 14000
>! arr_input_values: 140000
>! var_int_value: 140000
>! arr_input_values: 1.4e+06
>! var_int_value: 1400000
>! arr_input_values: 1.4e+07
>! var_int_value: 14000000
>! arr_input_values: 1.4e+08
>! var_int_value: 140000000
>! arr_input_values: 1.4e+09
>! var_int_value: 1400000000
>! to INF and beyond!
试验C的成功控制台打印输出:
>! arr_input_values: 0.02
>! var_int_value: 0
>! arr_input_values: 0.2
>! var_int_value: 0
>! arr_input_values: 2
>! var_int_value: 2
>! int --------->> arr_test_values: 2
>! arr_input_values: 0.06
>! var_int_value: 0
>! arr_input_values: 0.6
>! var_int_value: 0
>! arr_input_values: 6
>! var_int_value: 6
>! int --------->> arr_test_values: 6
>! arr_input_values: 0.1
>! var_int_value: 0
>! arr_input_values: 1
>! var_int_value: 1
>! int --------->> arr_test_values: 1
>! arr_input_values: 0.17
>! var_int_value: 0
>! arr_input_values: 1.7
>! var_int_value: 1
>! arr_input_values: 17
>! var_int_value: 17
>! int --------->> arr_test_values: 17
>! arr_input_values: 0.18
>! var_int_value: 0
>! arr_input_values: 1.8
>! var_int_value: 1
>! arr_input_values: 18
>! var_int_value: 18
>! int --------->> arr_test_values: 18
>! arr_input_values: 0.22
>! var_int_value: 0
>! arr_input_values: 2.2
>! var_int_value: 2
>! arr_input_values: 22
>! var_int_value: 22
>! int --------->> arr_test_values: 22
>! arr_input_values: 0.27
>! var_int_value: 0
>! arr_input_values: 2.7
>! var_int_value: 2
>! arr_input_values: 27
>! var_int_value: 27
>! int --------->> arr_test_values: 27
1条答案
按热度按时间nfs0ujit1#
小数是不精确的。如果您只是做简单的加法和减法,并且需要精确的数字,您可以使用数组来分别储存小数和整数。