如何获得分数长度?如果可能的话,不使用字符串操作或循环
should all return length of 3:
5.234
5.23400
5.234000
接受任何编程语言
[编辑]
不是作业,我想以最小的分数显示分数。例如,我在数据库中定义了数字(18,8)。如果用户仅输入5.234,则保存在数据库中的数据为5.23400000。我只想将它显示为仅5.234
答案 0 :(得分:3)
鉴于您关注显示而不是内部表示,为什么不剥离尾随0?
#!/use/bin/perl
my @nums = ( '5.234', '5.23400', '5.234000' );
$_ =~ s/0+$// for @nums; # remove trailing 0s
$_ =~ s/\.$// for @nums; # remove trailing .
print "@nums\n";
您可以将两者优化为单个正则表达式。
答案 1 :(得分:2)
If Int(num) = num Then Return 0
num *= 10
If Int(num) = num Then Return 1
num *= 10
If Int(num) = num Then Return 2
num *= 10
If Int(num) = num Then Return 3
num *= 10
If Int(num) = num Then Return 4
num *= 10
If Int(num) = num Then Return 5
num *= 10
If Int(num) = num Then Return 6
num *= 10
If Int(num) = num Then Return 7
num *= 10
If Int(num) = num Then Return 8
Throw New Exception("Number exceeds expected precision")
没有字符串操作,没有循环。
修改
BTW,用循环来做这件事:
result = 0
Do While (Int(num) !> num)
num *= 10
result += 1
Loop
Return result
稍微优雅
答案 2 :(得分:0)
对于非分数部分,长度为:
int((ln(v)/ln(10))+.999)
只要v> 1其中ln()是自然对数,int()总是向下舍入。对于v == 1,ln(v)返回0,因此您必须在特殊情况下处理此问题。
应该有可能为小数部分(v - int(v)
)实现同样的事情,但我的数学失败了。
答案 3 :(得分:0)
只需实现除法算法。 并且当数字计数>时停止7或8位数(对于float32)
答案 4 :(得分:0)
使用Java和JDBC时,通过ResultSet.getBigDecimal()获取值。要获得正确的比例,请使用此代码(Java 5及更高版本; Java 1.4中存在一个错误,导致“0.0”失败):
int precision = v.stripTrailingZeros().scale();
对于Java 1.4,请参阅this page。
答案 5 :(得分:0)
在Java中:
Double.valueOf("5.34000").toString();
我假设你可能想要将字符串转换为双倍。