我正在尝试使用带有TypeScript的Angular在HTML文件中进行此操作:{{(i / 5) % 3}}
。
问题是当i / 5
未返回自然数时,它无法继续操作% 3
部分。所以问题是:如何截断i / 5
以获得可接受的操作结果?
顺便说一下,我尝试使用JavaScript函数Math.trunc(i / 5)
但是我收到一条错误消息:
'无法读取undefined'
的属性trunc
答案 0 :(得分:2)
我无法理解这个问题。但是,你可以试试
Math.floor(i/5) % 3
。当你除以负数时,这会产生错误的结果。
答案 1 :(得分:1)
您可以使用三种不同的Math API。
Math.floor总是给你最低的数字:
Math.floor( 1 / 5 ) // 0
Math.floor( 4 / 5 ) // 0
Math.ceil总是给你最高的数字:
Math.ceil( 1 / 5 ) // 1
Math.ceil( 4 / 5 ) // 1
Math.round为您提供最接近的那个:
Math.round( 1 / 5 ) // 0
Math.round( 4 / 5 ) // 1
答案 2 :(得分:1)
答案 3 :(得分:1)
这个问题与TypeScript无关。 TypeScript不提供新的运算符或函数或截断数字的方法。 TypeScript只是JavaScript之上的一个类型层。
这是一个Angular问题。您不能在模板中使用Math
(任何其他全局变量)。您的选择是:
(~~(i/5)) % 3
(i/5 - (i/5) % 1) % 3
答案 4 :(得分:0)
编写用于截断的自定义管道
import { Pipe, PipeTransform } from '@angular/core';
import { DecimalPipe } from '@angular/common'
@Pipe({
name: 'truncateNum'
})
export class TruncateNumberPipe extends DecimalPipe implements PipeTransform {
transform(value: any, digitsInfo?: string): string | null {
const NUMBER_FORMAT_REGEXP = /^(\d+)?\.((\d+)(-(\d+))?)?$/;
const parts = digitsInfo.match(NUMBER_FORMAT_REGEXP);
let maxFraction;
if (parts === null) {
throw new Error(`${digitsInfo} is not a valid digit info for number pipes`);
}
if (parts[5] != null) { // max fraction digits
maxFraction = parseIntAuto(parts[5]);
}
return maxFraction ? super.transform(truncateToDecimals(strToNumber(value), maxFraction), digitsInfo) : super.transform(value, digitsInfo);
}
}
function parseIntAuto(text: string): number {
const result: number = parseInt(text);
if (isNaN(result)) {
throw new Error('Invalid integer literal when parsing ' + text);
}
return result;
}
/**
* truncate to decimal place.
*/
function truncateToDecimals(num, dec) {
const calcDec = Math.pow(10, dec);
return Math.trunc(num * calcDec) / calcDec;
}
/**
* Transforms a string into a number (if needed).
*/
function strToNumber(value: number | string): number {
// Convert strings to numbers
if (typeof value === 'string' && !isNaN(Number(value) - parseFloat(value))) {
return Number(value);
}
if (typeof value !== 'number') {
throw new Error(`${value} is not a number`);
}
return value;
}
答案 5 :(得分:-1)
您可以使用Math.trunc
Math.trunc(1.4) // 1
Math.trunc(1.9) // 1