如何使用具有整数结果的变量划分浮点数?

时间:2016-03-25 07:59:49

标签: bash shell scripting centos bc

2402267538.

所以length是一个变量,其值类似1024,需要除以")syntax error: invalid arithmetic operator (error token is "

执行此操作会抛出此错误

[KCSFileStore downloadData:@"myId" completionBlock:^(NSArray *downloadedResources, NSError *error) {
if (error == nil) {
    KCSFile* file = downloadedResources[0];
    NSData* fileData = file.data;
    id outputObject = nil;
    if ([file.mimeType hasPrefix:@"text"]) {
        outputObject = [[NSString alloc] initWithData:fileData encoding:NSUTF8StringEncoding];
    } else if ([file.mimeType hasPrefix:@"image"]) {
        outputObject = [UIImage imageWithData:fileData];
    }
    NSLog(@"downloaded: %@", outputObject);
} else {
    NSLog(@"Got an error: %@", error);
 }
} progressBlock:nil]; 

2 个答案:

答案 0 :(得分:0)

当你这样做时:

echo $(( length / 1024 )) | bc -l

由于bc -l执行整数除法,您已经在$(( length / 1024 ))之前的小数点后丢失了部分。

您可以像这样使用bc -l

length="2402267538"
answer=$(bc -l <<<"scale=2; $length / 1024")
echo "$answer"

2345964.39

使用awk更加冗长:

answer=$(awk -v len=$length 'BEGIN{printf "%.2f\n", len/1024}')
echo "$answer"

2345964.39

或者这个:

answer=$(awk -v len=$length 'BEGIN{printf "%d\n", len/1024}')
echo "$answer"

2345964

答案 1 :(得分:0)

切换到ksh会简化任务:

$ length=2402267538

$ answer=$((length/1024.00))
$ echo $answer
2345964.392578125

使用awk的一种方法:

$ answer=$(awk "BEGIN{printf(\"%f\n\",$length/1024);}")
$ echo $answer
2345964.392578

如果您只需要结果的整数部分(适用于bashksh):

$ answer=$((length/1024))
$ echo $answer
2345964

如果你的长度变量是浮点数,你可以这样修剪它:

$ length=2402267538.12
$ ilength=${length%%.*}
$ answer=$((ilength/1024))
$ echo $answer
2345964