如何四舍五入到最接近的10的幂
How to round down to the nearest power of 10?
我甚至找不到搜索关键字。请考虑以下代码:
float inputValue = getInputValue();
float resultValue;
if (inputValue < 0.1f) {
resultValue = 0.01f;
}
else if (inputValue < 1.0f) {
resultValue = 0.1f;
}
else if (inputValue < 10.0f) {
resultValue = 1.0f;
}
else {
resultValue = 10.0f;
}
等等。一定有一种更优雅的方式来做到这一点。我想解决办法很简单,但我试着找到一个方法,现在2个小时,阅读关于圆,天花板,地板……找不到
有人知道吗?
powf(10.0f, floorf(log10f(value)))
我相信有一个更简单的方法,不试图从第一原则向前工作,但是如何:
float inputValue = getInputValue();
float log10 = floorf(log10f(inputValue));
float modulo = powf(10.0f, log10);
inputValue -= fmodf(inputValue, modulo);
编辑:实际上,我认为我已经假设你想要230四舍五入到200,0.73四舍五入到0.7,等等,所以这可能不是答案。我把它留在这里,因为它可能会有所帮助。
你的代码没有按照你想象的那样做。对于任何小于100的值(包括0.001),resultValue将被设置为10。你需要按相反的顺序登记。
我将首先写下这个函数的规范:对于什么输入值,您期望得到什么输出值?对于1.01e17的输入,你期望1.0e17吗?如果输入是0或-1呢?
这是一个BigInteger版本。我需要的是下一个(而不是最近的)10的幂次,但你明白这个想法:
import java.math.BigInteger;
class A {
public static void main(String[]args) {
System.out.println("hi");
for (long v : new long[] {0,1,2,9,10,11,99,100,101,12345678,123456789012345678L,1234567890123456789L}) {
System.out.println(""+v+" ==> "+nextPowerOf10(v));
}
}
static long nextPowerOf10(long v) {
return BigInteger.TEN.pow((int)Math.max(0,1+Math.floor(Math.log10(v)))).longValue();
}
}
如果您希望它在10的幂上表现不同,请使用1+Math.floor
以上(0/1,地板/天花板/圆形)。顺便问一下,"最近"下面的OP是什么意思?最接近线性尺度还是对数尺度?更大还是更小?
>java A
hi
0 ==> 1
1 ==> 10
2 ==> 10
9 ==> 10
10 ==> 100
11 ==> 100
99 ==> 100
100 ==> 1000
101 ==> 1000
12345678 ==> 100000000
123456789012345678 ==> 1000000000000000000
1234567890123456789 ==> -8446744073709551616
相关文章:
- 查找最接近的大于当前数字的数字的索引
- 必须首先打印向量 v1 中最接近整数 x 的数字<int>
- 查找索引的最接近的真实值
- 如何优化代码以返回最接近给定整数的数字,但给定列表中不存在?
- C++ lower_bound() 搜索最接近目标值的元素
- C++有效地找到向量中第一个最接近的匹配值?
- 在结构向量中查找最接近的值
- 在排序数组中搜索最接近的 int 值 <= 从右起给定值
- C++中最接近 Lua 表操作的东西是什么?
- 在std::集中获取与给定元素最接近的元素
- 查找整数数组中最接近的数字
- Systemc - 将sc_time四舍五入到最接近的第 10 SC_NS
- 我是 c++ 的新手,有没有一种算法可以找到 3d 数组中最接近的 0 的距离?
- 我的程序不断四舍五入到最接近的整数
- 3 与错误最接近的总和:字符串常量之前的预期非限定 id
- 最接近Direct2D/DirectWrite的跨平台替代方案?
- 最接近的字符串:在字符串阵列中找到2个字符串之间的最小距离
- 最接近的一对点 用向量分而治之
- 取浮点数最接近的整数次幂
- 如何四舍五入到最接近的10的幂